
// 为什么写这个呢
// 因为暑研期间,在做 BEPCII 加速器数据的物理分析
// 然后分析程序是 C++ 写的,很多地方都用到动态数组
// 这玩意没学过 所以稍微整理学习一下
// 虽然名字叫vector,但是其应用多为数组
// 笔者一开始把分析程序中的 vector 理解为物理上的矢量,造成很大的困惑
C++ vector 可以看作一种动态数组,是标准模板库 (STL) 中常用的类模板,有点像 python 里面的 list 或者 ndarray。
#include <vector> 具体使用,众所周知就和类模板的用法一样。
vector<int> vec1; // 定义整型的vector vec1
vector<double> vec2(5); // 定义double型的vector,长度为 5 甚至,可以进行套娃,也就是这个vector类模板的实例还是个vector:
vector<vector<int>> vec3; // 定义一个由int型vector组成的vector 用 assign 函数可以直接指定向量的内容:
vec1.assign({1,2,3}); // 将向量1的内容设置为{1,2,3}
vec3.assign({{1,2},{3,4}}) // 和上面一个意思。 直接用 [ ] 可以访问 vector 的内容:
cout<<vec1[1]; // 输出 2
vec3[1][0] = 5;// 赋值为 5 末端添加/删除元素用 push_back 和 pop_back:
vec1.pop_back(); // 删除最后一个元素
vec3.push_back({5,6}); // 末端添加一个元素 {5,6}
cout<<vec3[2][1]<<endl; // 输出6 用 clear 清除所有内容:
vec1.clear(); // 清除vec1
bool isEmpty = vec1.empty(); // 判断是否为空,值为 true vector 类模板中还有一个常用的概念叫 iterator,即迭代器。vector的成员函数 begin() 和 end() 返回的类型就是 iterator。
vec2.assign({2,3,5,7,11});
vector<double>::iterator it = vec2.begin(); // it 是一个 iterator iterator的用法:
while(it != vec2.end())
{
cout<<*it; // iterator指向某个元素的地址,*it可以访问该元素
it++; // iterator自增时指向下一个元素
}
// 输出:246810 insert 和 erase 成员函数可以在特定位置插入、删除元素,且需要 iterator 作为指定位置的实参。
vec2.insert(vec2.begin(), 2.5); // 在begin位置前插入2.5
vec2.erase(vec2.begin()+2); // 删除begin+2位置的元素 以上就是vector类的常用用法。