c++ vector用法详解
1. 定义:
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)可以认为是一个动态数组,其中一个vector中的所有对象都必须是同一种类型的。
2. 构造函数:
2.1 一般情况
- vector vecName(); // 构造一个空vector,其中包含的对象为int类型
- vector vecName(3); // 构造一个空vector,其中包含的对象为int类型,大小为3
- vector vecName(3,value); // 构造一个空vector,其中包含的对象为int类型,大小为3,对象均为value
- vector vecName = { 1, 2, 3, 4 }; // 构造一个vector,初始值为[1,2,3,4]
- vector vecName(vecName2); // 构造一个vector,初始值为另一个vector类型的vecName2
2.2 将vec1的部分赋给vec2
- vector::const_iterator First = vec1.begin() + 1; // 找到开始迭代器
- vector::const_iterator Second = vec1.begin() + 4; // 找到结束迭代器
- vector vec2(First, Second); // 将值直接初始化到vec2(需要注意包括开头,但不包括结尾,即vec2只包含vec[1]到vec[3]的元素)
2.3 二维数组构造方法
- vector<vector > vecName(3); // 构造一个二维vector,其中一个维度为3
- vector<vector > vecName(3,vector(4)); // 构造一个3*4 的二维vector,其中默认值为0
- vector<vector > vecName(3, vector(4,1)); // 构造一个3*4 的二维vector,值均为1
- vector<vector > vecName = { {1, 2, 3}, {4, 5, 6} }; // 构造一个2*3 的二维vector,并赋值
3. 增加元素:
- vec1.push_back(x); // 在vec1的尾部添加一个元素x(注意:一般可以用emplace_back()代替,效率更高)
- vec1.insert(iterator iter, x); // 在vec1的迭代器iter指向元素前增加一个元素x
- vec1.insert(iterator iter, int n, x); // 在vec1的迭代器iter指向元素前增加n个元素x
- vec1.insert(iterator iter, const_iterator first,const_iterator last); // 在vec1的迭代器iter指向元素前插入另一个相同类型向量的[first,last)间的数据
4. 删除元素:
- vec1.pop_back(); // 删除在vec1的最后一个元素
- vec1.clear(); // 删除vec1中所有元素
- vec1.erase(iterator iter); // 删除vec1中迭代器指向元素
- vec1.erase(iterator first,iterator last); // 删除vec1中[first,last)中元素
5. 使用元素:
5.1 一般使用法
- vec1[1]; // 使用下标方式
- vec1.at(1); // 使用at方式
- vec1.front(); // 使用第一个元素
- vec1.back(); // 使用最后一个元素
5.2迭代器指针使用法:
- iterator begin(); // 返回向量头指针,指向第一个元素
vector<int>::iterator d = vec1.begin();
int d1 = *d;//vec1[0]
- iterator end(); // 返回向量尾指针,指向向量最后一个元素的下一个位置
vector<int>::iterator e = vec1.end() - 1;
int e1 = *e;//vec1[last]`
反向迭代器,是从后往前数的,即+1代表向前数一个元素
- reverse_iterator rbegin(); // 反向迭代器,指向最后一个元素
vector<int>::reverse_iterator f = vec1.rbegin();
int f1 = *f;//vec1[last]`
- reverse_iterator rend(); // 反向迭代器,指向第一个元素之前的位置,也就是vector[-1]
vector<int>::reverse_iterator g = vec1.rend() - 1;
int g1 = *g;//vec1[0]
6. 判断是否为空:
- bool empty() const:判断向量是否为空,若为空,则向量中无元素
vector<int> vec1 = { 1, 2, 3, 4, 5 };
bool i = vec1.empty();//输出:false
vector<int> vec2 = { };
bool j = vec2.empty();//输出:true
7. 大小函数:
- unsigned int length = vec1.size()//vec1所含元素的个数
8. 使用时的注意事项:
8.1 头文件及其命名空间
#include<vector>
using namespace std;
8.2 Vector 作为函数的返回值时,
方法一:vector<int> fun1(int num);(不推荐)
方法二:bool fun1(int num, vector<int> $&$vec);(推荐)
8.3 将vec2中的内容追加到vec1的后面:
vec1.insert(vec1.end(), vec2.begin(), vec2.end());
8.4 最大最小元素及其索引:
#include<algorithm>
vector<double>::iterator biggest = max_element(begin(vec1), end(vec1));
double biggestValue = *biggest;//最大值
int biggestIndex = distance(begin(begin(vec1), biggest);//最大值索引
vector<double>::iterator smallest = min_element(begin(vec1), end(vec1));
double smallestValue = *smallest;//最大值
int smallestIndex = distance(begin(begin(vec1), smallest);//最大值索引
c++ vector用法详解的更多相关文章
- 【C++】vector用法详解
转自:https://blog.csdn.net/fanyun_01/article/details/56842637#commentBox 一.简介 C++ vector类为内置数组提供了一种替代表 ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
- STL vector常见用法详解
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...
- 7-set用法详解
C++中set用法详解 转载 http://blog.csdn.net/yas12345678/article/details/52601454 C++ / set 更详细见:http://www.c ...
- STL priority_queue 常见用法详解
<算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...
- STL string 常见用法详解
string 常见用法详解 1. string 的定义 //定义string的方式跟基本数据类型相同,只需要在string后跟上变量名即可 string str; //如果要初始化,可以直接给stri ...
- STL set 常见用法详解
<算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...
- 2.3 C++STL vector容器详解
文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
随机推荐
- [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识
[源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...
- Vue之前后端交互
Vue之前后端交互 一.前后端交互模式 接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责 ...
- TensorFlow解析常量、变量和占位符
TensorFlow解析常量.变量和占位符 最基本的 TensorFlow 提供了一个库来定义和执行对张量的各种数学运算.张量,可理解为一个 n 维矩阵,所有类型的数据,包括标量.矢量和矩阵等都是特殊 ...
- L4自动驾驶技术
L4自动驾驶技术 一.SAE的五个级别分别是: L0:驾驶员完全掌控车辆,无任何自动化能力. L1:自动系统有时能够辅助驾驶员完成某些驾驶任务.比如高速自动巡航(自动认知所在车道),和一些驾驶辅助功能 ...
- 适用于Windows和Linux的Yolo-v3和Yolo-v2(下)
适用于Windows和Linux的Yolo-v3和Yolo-v2(下) 如何训练(检测自定义对象): (培养老YOLO V2 yolov2-voc.cfg,yolov2-tiny-voc.cfg,yo ...
- 简化可视SLAM应用程序的开发
简化可视SLAM应用程序的开发 Easing the development of visual SLAM applications 同步定位和映射(SLAM)描述了一个设备(如机器人)使用传感器数据 ...
- 认真总结Vue3中ref与reactive区别和isRef与isReactive 类型判断
1.什么是ref? 1.ref和reactive-样 也是用来实现响应式数据的方法 由于reactive必须传递一个对象, 所以导致在企业开发中如果我们只想让某个变量实现响应式的时候会非常麻烦 所以V ...
- 【NX二次开发】NX内部函数,libugui.dll文件中的内部函数
本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: bool A ...
- Redis分布式锁 (图解-秒懂-史上最全)
文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...
- Spring Cloud底层原理解析
概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...