一、什么是vector?
向量(Vector)是c++语言中提供的一种容器。不单可以存储传统意义的数据,还能够存放各种类型的对象。可以简单地认为,向量是一个能够存放任意类型的动态数组.
二、容器特性:
1.元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素
2.支持对序列中的任意元素进行快速直接访问,也可通过指针进行操作。在序列末尾可以添加/删除元素。
3.无需人为干预,内部有一个内存分配器对象来动态地处理它的存储需求
三、容器的基础操作:
1.头文件:#include<vector>
2.vector声明及初始化:
vector<int> vec; //声明一个int型向量
vector<int> vec(5); //声明一个初始大小为5的int向量
vector<int> vec(10, 1); //声明一个初始大小为10且值都是1的向量
vector<int> vec(tmp); //声明并用tmp向量初始化vec向量
vector<int> tmp(vec.begin(), vec.begin() + 3); //用向量vec的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5}; vector<int> vec(arr, arr + 5); //将arr数组的元素用于初始化vec向量 //说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素, //这个主要是为了和vec.end()指针统一。
vector<int> vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
3. vector基本操作:
- 向量大小: vec.size();
- 末尾添加元素: vec.push_back();
- 末尾删除元素: vec.pop_back();
- 元素访问:下标访问: vec[1];
- 元素访问:at方法访问: vec.at(1); //以上两者的区别就是at会检查是否越界
- 清空数据:vec.clear();
4. 自带算法操作:
- 遍历元素:
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); it++) cout << *it << endl;
//或者
for (size_t i = 0; i < vec.size(); i++) { cout << vec.at(i) << endl; }
- 元素反转:
reverse(vec.begin(), vec.end());
- 元素排序:
sort(vec.begin(), vec.end()); //采用的是从小到大的排序 //如果想从大到小排序,可以采用上面反转函数,也可以采用下面方法:
bool Comp(const int& a, const int& b) {
return a > b;
}
sort(vec.begin(), vec.end(), Comp);
在深度学习算法开发中,我们经常会使用嵌套vector来存储数据,模仿其它深度学习框架的tensor,以下是我在实际开发中的代码,分享给大家。如果对您有用,记得关注点赞: