vector 容器
向量vector 可以理解为一个能存放任意类型的动态分配的数组。
这里展示一些常用的函数
加入头文件
#include <vector>
首先创建一个vector
std::vector<int> v;
表示我要创建一个向量,这个向量名字叫v,存放的全都是int型的数据。
这里的 int 可以换成 string double float 等任意数据类型。
我们知道数组在定义的时候需要写明数组的容量。向量也可以这样做
std::vector<int> v(10);
表示我定义了一个名字叫 v 的向量,v里面有 10 个 int 型的数据。
也可以在定义的同时,就初始化向量的数据
std::vector<int> v(10,20);
表示我定义了一个含有10个元素 ,且每一个元素值都是 int 型的 20 的向量 名字叫 v。
元素的个数
std::vector<int>::size_type count = v.size();
前面的 std::vector<int>::size_type 表示数据类型 可以理解为无符号整形
查看首位元素
v.front(); //返回首元素的值 v.back(); //返回尾元素的值
在向量的末尾添加一个元素 30
v.push_back(30);
只能在末尾添加,添加之后向量的size就变化了
int main(int argc,char *argv[]) { std::vector<int> v(10,20); cout<<v.size()<<endl; v.push_back(30); cout<<v.size()<<endl; return 0; }
输出结果为
10 11
可见改变了向量的size。
把刚才添加的元素删掉
v.pop_back();
删除最后一个元素,看下面示例代码:
int main(int argc,char *argv[]) { std::vector<int> v(10,20); cout<<v.size()<<endl; v.push_back(30); cout<<v.size()<<endl; v.pop_back(); cout<<v.size()<<endl; return 0; }
输出结果为
10 11 10
清空所有的元素
v.clear();
示例代码:
int main(int argc,char *argv[]) { std::vector<int> v(10,20); cout<<v.size()<<endl; v.push_back(30); cout<<v.size()<<endl; v.pop_back(); cout<<v.size()<<endl; v.clear(); cout<<v.size()<<endl; return 0; }
输出结果:
10 11 10 0
此时向量 v 中已经没有任何元素
判断向量是否为空
bool isempty = v.empty();
访问指定位置的元素
std::vector<int> v(10); for (int i = 13; i != 20; ++i) { v.push_back(i); } cout<<v.at(16)<<endl;
访问到第16个元素,其值为19
利用迭代器访问向量元素
首先定义一个迭代器
vector<int>::iterator iter;
定义了一个类型为 vector<int> 的迭代器 名字叫 iter
注意迭代器的数据类型应该和向量相同
然后使用迭代器遍历向量
for (iter = v.begin(); iter != v.end(); ++iter) { cout<<*iter<<endl; }
插入元素
v.insert();
直接看一个例子
int main(int argc,char *argv[]) { std::vector<int> v(10); for (int i = 13; i != 20; ++i) { v.push_back(i); } v.insert(v.begin(),19); //在最前面增加一个元素 19 v.insert(v.begin()+1,17); //在第一个元素后面 加一个元素 17 v.insert(v.end(),2,3); //在最后面增加2个元素 3 for(vector<int>::iterator i = v.begin();i!=v.end();i++) { cout<<*i<<" "; } return 0; }
运行结果如下:
19 17 0 0 0 0 0 0 0 0 0 0 13 14 15 16 17 18 19 3 3
可以看到,初始化时的10个0并没有改变,用push_back() 加入的元素在后面
用insert 插入的元素分别在第一个 第二和最后
删除某个元素
erase(iterator __position);
erase(iterator __first, iterator __last);
看下面的例子
int main(int argc,char *argv[]) { std::vector<int> v(10); for (int i = 13; i != 20; ++i) { v.push_back(i); } v.insert(v.begin(),19); //在最前面增加一个元素 19 v.insert(v.begin()+1,17); //在第一个元素后面 加一个元素 17 v.insert(v.end(),2,3); //在最后面增加2个元素 3 v.erase(v.begin()+1); //删除第2个元素 (也就是刚才第二个添加的17) v.erase(v.begin()+1,v.begin()+10); //删除第2到第11个元素 (总共删除了9个元素) for(vector<int>::iterator i = v.begin();i!=v.end();i++) { cout<<*i<<" "; } return 0; }
运行结果如下
19 0 13 14 15 16 17 18 19 3 3