vector简介
vector的头文件是< vector >, 它类似于我们之前实现的线性表和C语言里的动态数组. 和string的存储方式也有些类似.
vector使用
vector的操作与string类似
构造函数
vector<int> num;//实例化一个vector类对象,存放的元素的数据类型是int型,num里面是空的
//<>里不一定要放默认的类型, 放string型或者自定义类型都是可以的
vector<int> num2(4,2);//实例化构造,并将num2内的元素初始化为4个2
vector<int> num3(num);//拷贝构造
迭代器
vector<int>:iterator it1 = num.begin();//begin, end, rbegin, rend和string里的一样
const vector<int> num4;
const vector<int>:const_iterator it2 = num4.begin();//const对象使用const迭代器
迭代器失效
要注意的是, vector中很容易产生迭代器失效的问题.
//删除数据导致的迭代器失效
int arr[] ={1,2,3,4};
vector<int> num(arr,arr + sizeof(arr)/sizeof(int));
vector<int>::iterator pos = find(num.begin(), num.end(), 3);
num.erase(pos);
cout << *pos <<endl;//此时会导致非法访问
//插入数据导致的迭代器失效
pos = find(num.begin(), num.end(), 3);
num.insert(pos, 30);
cout << *pos << endl; //insert可能会触发扩容,扩容后原有的空间被释放,
//num指向新的空间,而此时pos还是指向原来的空间
//此时会导致非法访问