文章目录
一、什么是vector
二、vector的操作
1.vector的定义
2.vector内元素的访问
(1)通过下标访问
(2)通过迭代器访问
3.vector中的函数
(1)push_back()
(2)pop_back()
(3)size();
(4)clear()
(5)insert()
(6)erase()
删除单个元素
删除一个区间内的元素
一、什么是vector
vector就是边长数组,相比较与数组我们需要提前规定它的容量,它可以根据运算自动改变数组的长度,我们在平时写题的时候可能会遇到爆内存的情况,这就是我们数组长度开太长的结果,在这个时候我们就可以用vector去存储
我们在使用vector的时候,需要添加头文件#include <vector>
二、vector的操作
1.vector的定义
vector<typename> name;
typename可以是任意的数据类型,当然也可以是STL中的其他容器,例如vector,set,queue。name的话就是你给这个vector数组起的名字,比如我们可以起名叫a,当然也可以是其他的名字,下面是几个vector的例子
vector<int> a; vector<double> b; vector<char> c; vector<vector<int>> v; //这里如果报错的话,写成如下样子: vector<vector<int> > v; //报错原因是C++11以前的编译器会把这个翻译成移位操作
2.vector内元素的访问
(1)通过下标访问
和数组的访问一致,对于
vector<int> a;
来讲,我们可以直接通过v[0]
,v[1]
进行访问,注意这里的下标是从0 ~ v.size() - 1
,v,size()
是v内的元素数量,后面我们会进行讲述.
(2)通过迭代器访问
迭代器我们可以理解成一个类似于指针的东西
定义一个迭代器:
vector<typename>::iterator it;
这样it就是vector<typename>::iterator类型的变量,typename就是定义vector时候的类型,当然it也可以写成t或者其他的样子,这里写成it是习惯,有了it这个迭代器,我们就可以通过*it来访问vector中的元素,下面我们距离来说明:
v.push_back(i);的意思是把i放入v这个vector中,下面我们会有详细的讲解
v.begin()是v的首元素地址
v.end()是取v的尾元素地址的下一个地址
在这里的begin()和end()是迭代器的开始和结束标志,美国人的思维习惯左闭右开[ )
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v; for (int i = 0; i < 10; i ++ ) v.push_back(i); vector<int>::iterator it = v.begin(); for (int i = 0; i < 10; i ++ ) cout << *(it + i) << ' '; return 0; }
输出结果为0 1 2 3 4 5 6 7 8 9
所以v[i]
和*(v.begin() + i)
是等价的
利用迭代器的自增和字减去遍历元素
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v; for (int i = 0; i < 10; i ++ ) v.push_back(i); //注意迭代器的遍历不能写成 it < v.end();结束循环条件只能是 it != v.end(); for (vector<int>::iterator it = v.begin(); it != v.end(); it ++ ) cout << *it << ' '; return 0; }
当然我们可以通过auto
缩写
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v; for (int i = 0; i < 10; i ++ ) v.push_back(i); //注意迭代器的遍历不能写成 it < v.end();结束循环条件只能是 it != v.end(); for (auto it = v.begin(); it != v.end(); it ++ ) cout << *it << ' '; return 0; }
输出结果为0 1 2 3 4 5 6 7 8 9