zoukankan      html  css  js  c++  java
  • C++基础:C++中vector使用简介


    vector是C++标准库中的一个类,与数组颇为相似,不同之处在于,vector可以自动扩展容量,故可以将其视为会自动扩展容量的数组。vector是C++标准程序库中的众多容器(container)之一,能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型数据的动态数组。

    为了可以使用vector,需要在你的头文件中包含下面的代码:

    #include <vector>

    using namespace std;


    以下着重介绍vector的常见用法:

    1)  创建一个vector,有多种方法。

    vector< 类型 > 标识符 ; //如vector< int> Vint ;
    vector< 类型 > 标识符(最大容量) ; // 如vector< int> Vint(100)创建包含100个int数据的vector ;
    vector< 类型 > 标识符(最大容量,初始所有值); // 如vector< int> Vint(100,int(10))极为创建包含100个int数据(均初始化为10)的vector ;
    vector< 类型 > 标识符(该类型vector对象); // 如vector< int> Vint2(Vint)创建了一个Vint的拷贝

    2)  利用数组初始化vector  

    int i[10] ={0,1,2,3,4,5,6,7,8,9} ; 
    vector<int> v(i+1,i+9);//使用数组对C++ Vector进行初始化

    其中i+1,i+9表示从数组的第一个值到第九个值之前的值,即i[1]到i[8]


    3)  vector二维对象定义,相当于二维数据。

    vector< int > v(100,int(9));//创建包含100个int数据的vector 
    vector< vector<int> > v2;//二维容器
    for(int i =0;i<10;i++)
    {
    	v2.push_back(v);
    }


    4) 元素访问方法

    • vec[i] - 访问索引值为 i 的元素引用。 (索引值从零起算,故第一个元素是vec[0]。)
    • vec.at(i) - 访问索引值为 i 的元素的引用,以 at() 访问会做数组边界检查,如果访问越界将会抛出一个例外,这是与operator[]的唯一差异。
    • vec.front() - 回传 vector 第一个元素的引用。
    • vec.back() - 回传 vector 最尾元素的引用。

    5) 新增或移除元素

    • vec.push_back() - 新增元素至 vector 的尾端,必要时会进行存储器配置。
    • vec.pop_back() - 删除 vector 最尾端的元素。
    • vec.insert() - 插入一个或多个元素至 vector 内的任意位置。
    • vec.erase() - 删除 vector 中一个或多个元素。
    • vec.clear() - 清空所有元素。

    6)   取得长度/容量

    • vec.size() - 取得 vector 目前持有的元素个数。
    • vec.empty() - 如果 vector 内部为空,则传回 true 值。
    • vec.capacity() - 取得 vector 目前可容纳的最大元素个数。这个方法与存储器的配置有关,它通常只会增加,不会因为元素被删减而随之减少。

    7)   重新配置/重设长度

    • vec.reserve() - 如有必要,可改变 vector 的容量大小(配置更多的存储器)。在众多的 STL 实做,容量只能增加,不可以减少。
    • vec.resize() - 改变 vector 目前持有的元素个数。

    8)  迭代 (Iterator)

    • vec.begin() - 回传一个Iterator,它指向 vector 第一个元素。
    • vec.end() - 回传一个Iterator,它指向 vector 最尾端元素的下一个位置(请注意:它不是最末元素)。
    • vec.rbegin() - 回传一个反向Iterator,它指向 vector 最尾端元素的。
    • vec.rend() - 回传一个Iterator,它指向 vector 的第一个元素。

    9)  vector排序

    vector< int > v ;   
    v.push_back(11);  
    v.push_back(7);  
    v.push_back(15);  
    sort(v.begin() , v.end()); // 从小到大  
    reverse(v.begin(),v.end()) // 从大到小
    

    10) vector查找

    vector < int > v ;   
    for( int i = 0 ; i < 10 ; i ++ )  
    {  
    	vector.push_back(i);  
    }   
    vector < int >::interator itr = find(v.begin() , v.end(), 7) ;  //find方法需引入#include<algorithm>>
    cout << *itr << endl ; ///返回容器内找到值的位置。 


    11) vector访问

    for(int i = 0 ; i < 10 ; i ++) // 第一种方法  
    	cout <<v[i] <<" " ;   
    cout<<endl;
    
    vector<int>::iterator itr;
    for(itr = v.begin();itr!= v.end();itr++)//第二种方法
    	cout<<*itr<<" ";
    cout<<endl;


    一段完整代码示例:

    #include<iostream>
    #include<vector>
    #include<algorithm>
    
    using namespace std;
    
    int main(int argc,char* argv[])
    {
    	int i[11] ={0,1,2,3,4,5,6,7,8,9,10} ; 
    	vector<int> v(i,i+10);//使用数组对vector进行初始化
    	//vector< int > v(100,int(9));//创建包含100个int数据的vector ;
    	//vector< int > v ;
    
        // for(int i = 0; i < 10; i++ )//插入项方式初始化
    	//	v.push_back( i );
    
    	vector<vector<int>> v2;//二维容器
    	for(int i =0;i<10;i++)
    	{
    		v2.push_back(v);
    	}
    
    	cout<<"方法一输出:"<<endl;
    	for(int i = 0 ; i < 10 ; i ++) // 第一种方法  
    		cout <<v[i] <<" " ;   
    	cout<<endl;
    
    	cout<<"方法二输出:"<<endl;
    	vector<int>::iterator itr;
    	for(itr = v.begin();itr!= v.end();itr++)//第二种方法
    		cout<<*itr<<" ";
    	cout<<endl;
    
    	vector<int>::iterator itr2 = find(v.begin(),v.end(),7);//查找
    		cout<<"数据7的位置"<< *itr2<<endl;
    
    	system("pause");
    	return 0;
    }
    
    








  • 相关阅读:
    洛谷 P1706 全排列
    n皇后问题
    跳马
    [HDOJ4612]Warm up(双连通分量,缩点,树直径)
    [POJ3177]Redundant Paths(双连通图,割边,桥,重边)
    [POJ3352]Road Construction(缩点,割边,桥,环)
    [POJ3694]Network(LCA, 割边, 桥)
    [UVA796]Critical Links(割边, 桥)
    [UVA315]Network(tarjan, 求割点)
    [HDOJ2586]How far away?(最近公共祖先, 离线tarjan, 并查集)
  • 原文地址:https://www.cnblogs.com/f8master/p/3826084.html
Copyright © 2011-2022 走看看