本文作者:bang

算法工程师之路---Vector容器解析(c++语言)

bang 2021-07-11 119
算法工程师之路---Vector容器解析(c++语言)摘要: 一、什么是vector?向量(Vector)是c++语言中提供的一种容器。不单可以存储传统意义的数据,还能够存放各种类型的对象。可以简单地认为,向量是一个能够存放任意类型的动态数组...

一、什么是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,以下是我在实际开发中的代码,分享给大家。如果对您有用,记得关注点赞:

算法工程师之路---Vector容器解析(c++语言)

三维数据的定义

算法工程师之路---Vector容器解析(c++语言)

4维数据的定义

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享