http://blog.csdn.net/xiejingfa/article/details/8884979
在C++中,通常使用数组来存放一组具有相同数据类型的数据,但是数组在使用前必须先确定其大小。
STL中提供了vector类,即动态数组。既然是数组,vector自然具有数组的一些特征,比如下标从零开始、
可以通过下标来访问数组中的数据元素等,不同的是:vector具有容量动态增长的能力,而不像普通数组
一样其容量一旦确定就不能修改。
下面我们来学习一下vector的基本用法。
vector类为用户提供了许多函数,比较常用的有以下:
1、构造函数
- vector()
- //创建一个空的vector对象, T为vector存放的元素类型(下同)
- vector(int size)
- //创建一个大小为size的vector对象
- vector(int size, T t)
- //创建一个大小为size, 各元素值均为t的vector对象
2、往vector中添加元素
- void push_back(T t)
- //在vector的尾部增加一个元素
- iterator insert(iterator iter, T t)
- //在vector中某一元素前插入一个元素t,iterator为迭代器
- void insert(iterator iter, int n, T t)
- //在vector中某一元素钱插入n个相同的元素t
- void insert(iterator iter, iterator first, iterator last)
- //在vector中某一元素钱插入另一个相同类型vector中[first, last)间的数据
3、删除元素
- iterator erase(iterator iter)
- //删除vector中某一个元素
- iterator erase(iterator first, iterator last)
- //删除vector中[first, last)中的元素
- void clear()
- //删除vector中的所有元素
4、遍历vector
- T at(int i)//返回下标为i位置的元素
- T front()//返回首元素
- T back()//返回尾元素
- iterator begin()//返回vector的头指针,指向第一个元素
- iterator end()//返回vector的尾指针,指向最后一个元素的下一个位置
- reverse_iterator rbegin()//反向迭代器,返回最后一个元素的迭代指针
- reverse_iterator rend()//反向迭代器, 返回第一个元素钱一个位置的迭代指针
5、其他
- bool empty()//判断vector是否为空
- int size()//返回vector中元素个数
- int capacity()//返回当前vector的最大容量
- void assign(int n, T t)//将vector中第n个元素设置为t
接下来通过一个具体的例子来看看上述函数的简单用法
- #include
- #include
- using namespace std;
- int main(void) {
- //初始化vector
- 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;
- //往vector中插入元素
- int_vec.push_back(1);
- int_vec.push_back(2);
- int_vec.push_back(3);
- int_vec.push_back(4);
- int_vec.push_back(5);
- printf("\n下面测试输出\n");
- int size = int_vec.size();
- //
- printf("通过数组方式输出\n");
- for(int i = 0; i < size; i++) {
- printf("%d ", int_vec[i]);
- }
- printf("\n通过引用方式输出\n");
- for(int i = 0; i < size; i++) {
- printf("%d ", int_vec.at(i));
- }
- printf("\n通过迭代器输出\n");
- 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();
- while(iter1 != int_vec.end()) {
- printf("%d ", *iter1);
- iter1++;
- }
- printf("\n通过反向迭代器输出\n");
- 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();
- while(iter2 != int_vec.rend()) {
- printf("%d ", *iter2);
- iter2++;
- }
- printf("\n下面测试修改元素\n");
- printf("通过数组下标方式修改第一个元素。");
- int_vec[0] = 5;
- printf("修改后第一个元素为:%d\n", int_vec[0]);
- printf("通过引用方式修改第二个元素。");
- int &p = int_vec.at(1);
- p = 6;
- printf("修改后的第二个元素为:%d\n", p);
- printf("通过迭代器修改第三个元素。");
- 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;
- *iter3 = 7;
- printf("修改后第三个元素为:%d\n", *iter3);
- printf("\n下面测试删除元素\n");
- printf("删除第一个元素后,剩余元素为: ");
- int_vec.erase(int_vec.begin());
- for(int i = 0; i < int_vec.size(); i++) {
- printf("%d ", int_vec[i]);
- }
- printf("\n删除第1~3个元素后,剩余元素为: ");
- int_vec.erase(int_vec.begin(), int_vec.begin()+2);
- for(int i = 0; i < int_vec.size(); i++) {
- printf("%d ", int_vec[i]);
- }
- return 0;
- }
输出:
下面测试输出
通过数组方式输出
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