C++里的vector用法,比数组方便很…

http://blog.csdn.net/xiejingfa/article/details/8884979

 在C++中,通常使用数组来存放一组具有相同数据类型的数据,但是数组在使用前必须先确定其大小。

STL中提供了vector类,即动态数组。既然是数组,vector自然具有数组的一些特征,比如下标从零开始、

可以通过下标来访问数组中的数据元素等,不同的是:vector具有容量动态增长的能力,而不像普通数组

一样其容量一旦确定就不能修改。

 

      下面我们来学习一下vector的基本用法。

 

       vector类为用户提供了许多函数,比较常用的有以下:

 

1、构造函数

  1. vector()  
  2. //创建一个空的vector对象, T为vector存放的元素类型(下同)  
  3. vector(int size)  
  4. //创建一个大小为size的vector对象  
  5. vector(int size, T t)   
  6. //创建一个大小为size, 各元素值均为t的vector对象  

 

2、往vector中添加元素

  1. void push_back(T t)   
  2. //在vector的尾部增加一个元素  
  3. iterator insert(iterator iter, T t)   
  4. //在vector中某一元素前插入一个元素t,iterator为迭代器  
  5. void insert(iterator iter, int n, T t)    
  6. //在vector中某一元素钱插入n个相同的元素t  
  7. void insert(iterator iter, iterator first, iterator last)    
  8. //在vector中某一元素钱插入另一个相同类型vector中[first, last)间的数据  


3、删除元素

  1. iterator erase(iterator iter)  
  2. //删除vector中某一个元素  
  3. iterator erase(iterator first, iterator last)  
  4. //删除vector中[first, last)中的元素  
  5. void clear()  
  6. //删除vector中的所有元素  


4、遍历vector

  1. T at(int i)//返回下标为i位置的元素  
  2. T front()//返回首元素  
  3. T back()//返回尾元素  
  4. iterator begin()//返回vector的头指针,指向第一个元素  
  5. iterator end()//返回vector的尾指针,指向最后一个元素的下一个位置  
  6. reverse_iterator rbegin()//反向迭代器,返回最后一个元素的迭代指针  
  7. reverse_iterator rend()//反向迭代器, 返回第一个元素钱一个位置的迭代指针  


5、其他

  1. bool empty()//判断vector是否为空  
  2. int size()//返回vector中元素个数  
  3. int capacity()//返回当前vector的最大容量  
  4. void assign(int n, T t)//将vector中第n个元素设置为t  


 

接下来通过一个具体的例子来看看上述函数的简单用法

 

  1. #include  
  2. #include  
  3. using namespace std;  
  4.   
  5. int main(void) {  
  6.     //初始化vector  
  7.     vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int> int_vec;  
  8.     //往vector中插入元素  
  9.     int_vec.push_back(1);  
  10.     int_vec.push_back(2);  
  11.     int_vec.push_back(3);  
  12.     int_vec.push_back(4);  
  13.     int_vec.push_back(5);  
  14.   
  15.     printf("\n下面测试输出\n");  
  16.     int size = int_vec.size();  
  17.   
  18.     //  
  19.     printf("通过数组方式输出\n");  
  20.     for(int i = 0; i < size; i++) {  
  21.         printf("%d  ", int_vec[i]);  
  22.     }  
  23.   
  24.     printf("\n通过引用方式输出\n");  
  25.     for(int i = 0; i < size; i++) {  
  26.         printf("%d  ", int_vec.at(i));  
  27.     }  
  28.   
  29.     printf("\n通过迭代器输出\n");  
  30.     vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::iterator iter1 = int_vec.begin();  
  31.     while(iter1 != int_vec.end()) {  
  32.         printf("%d  ", *iter1);  
  33.         iter1++;  
  34.     }  
  35.   
  36.     printf("\n通过反向迭代器输出\n");  
  37.     vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::reverse_iterator iter2 = int_vec.rbegin();  
  38.     while(iter2 != int_vec.rend()) {  
  39.         printf("%d  ", *iter2);  
  40.         iter2++;  
  41.     }  
  42.   
  43.     printf("\n下面测试修改元素\n");  
  44.     printf("通过数组下标方式修改第一个元素。");  
  45.     int_vec[0] = 5;  
  46.     printf("修改后第一个元素为:%d\n", int_vec[0]);  
  47.   
  48.     printf("通过引用方式修改第二个元素。");  
  49.     int &p = int_vec.at(1);  
  50.     p = 6;  
  51.     printf("修改后的第二个元素为:%d\n", p);  
  52.   
  53.     printf("通过迭代器修改第三个元素。");  
  54.     vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::iterator iter3 = int_vec.begin()+2;  
  55.     *iter3 = 7;  
  56.     printf("修改后第三个元素为:%d\n", *iter3);  
  57.   
  58.     printf("\n下面测试删除元素\n");  
  59.     printf("删除第一个元素后,剩余元素为:  ");  
  60.     int_vec.erase(int_vec.begin());  
  61.     for(int i = 0; i < int_vec.size(); i++) {  
  62.         printf("%d  ", int_vec[i]);  
  63.     }  
  64.   
  65.     printf("\n删除第1~3个元素后,剩余元素为:  ");  
  66.     int_vec.erase(int_vec.begin(), int_vec.begin()+2);  
  67.     for(int i = 0; i < int_vec.size(); i++) {  
  68.         printf("%d  ", int_vec[i]);  
  69.     }  
  70.   
  71.     return 0;  
  72. }  


 

输出:

下面测试输出
通过数组方式输出
1  2  3  4  5
通过引用方式输出
1  2  3  4  5
通过迭代器输出
1  2  3  4  5
通过反向迭代器输出
5  4  3  2  1
下面测试修改元素
通过数组下标方式修改第一个元素。修改后第一个元素为: 5
通过引用方式修改第二个元素。修改后的第二个元素为: 6
通过迭代器修改第三个元素。修改后第三个元素为: 7

下面测试删除元素
删除第一个元素后,剩余元素为: 6  7  4  5
删除第1~3个元素后,剩余元素为:  4  5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章