C++ vector || 各种软件
湮灭的末影狐
2022年10月17日 15:19
收录于文集
共13篇

// 为什么写这个呢

// 因为暑研期间,在做 BEPCII 加速器数据的物理分析

// 然后分析程序是 C++ 写的,很多地方都用到动态数组

// 这玩意没学过 所以稍微整理学习一下

// 虽然名字叫vector,但是其应用多为数组

// 笔者一开始把分析程序中的 vector 理解为物理上的矢量,造成很大的困惑


C++ vector 可以看作一种动态数组,是标准模板库 (STL) 中常用的类模板,有点像 python 里面的 list 或者 ndarray。

代码块
C++
自动换行
复制代码
#include <vector>
复制成功

具体使用,众所周知就和类模板的用法一样。

代码块
C++
自动换行
复制代码
vector<int> vec1;		// 定义整型的vector vec1
vector<double> vec2(5);	// 定义double型的vector,长度为 5
复制成功

甚至,可以进行套娃,也就是这个vector类模板的实例还是个vector:

代码块
C++
自动换行
复制代码
vector<vector<int>> vec3;	// 定义一个由int型vector组成的vector
复制成功

用 assign 函数可以直接指定向量的内容:

代码块
C++
自动换行
复制代码
vec1.assign({1,2,3});	// 将向量1的内容设置为{1,2,3}
vec3.assign({{1,2},{3,4}})	// 和上面一个意思。
复制成功

直接用 [ ] 可以访问 vector 的内容:

代码块
JavaScript
自动换行
复制代码
cout<<vec1[1];	 // 输出 2
vec3[1][0] = 5;// 赋值为 5
复制成功

末端添加/删除元素用 push_back 和 pop_back:

代码块
C++
自动换行
复制代码
vec1.pop_back();	// 删除最后一个元素
vec3.push_back({5,6});	// 末端添加一个元素 {5,6}
cout<<vec3[2][1]<<endl;	// 输出6
复制成功

用 clear 清除所有内容:

代码块
C++
自动换行
复制代码
vec1.clear();		// 清除vec1
bool isEmpty = vec1.empty();	// 判断是否为空,值为 true
复制成功

vector 类模板中还有一个常用的概念叫 iterator,即迭代器。vector的成员函数 begin() 和 end() 返回的类型就是 iterator。

代码块
C++
自动换行
复制代码
vec2.assign({2,3,5,7,11});
vector<double>::iterator it = vec2.begin();	// it 是一个 iterator
复制成功

iterator的用法:

代码块
C++
自动换行
复制代码
while(it != vec2.end())
{
	cout<<*it;	// iterator指向某个元素的地址,*it可以访问该元素
   it++;		// iterator自增时指向下一个元素
}
// 输出:246810
复制成功

insert 和 erase 成员函数可以在特定位置插入、删除元素,且需要 iterator 作为指定位置的实参。

代码块
C++
自动换行
复制代码
vec2.insert(vec2.begin(), 2.5);		// 在begin位置前插入2.5
vec2.erase(vec2.begin()+2);			// 删除begin+2位置的元素
复制成功

以上就是vector类的常用用法。