c++头文件之Vector
2021/7/22 22:07:07
本文主要是介绍c++头文件之Vector,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
c++头文件之Vector
首先,我们需要该清楚Vector的定义: C++标准库提供了被封装的动态数组——Vector。大体上讲,就是更容易上手的动态数组.让我们看看Vector的优缺点.
-
优点:
1). Vector可以存放任意类型的数据
2). 容量可以自动扩展
3). 初始化形式简单,多样
4). 可以插入或删除元素
5). 可以获取数组的长度(是否为空)
6). 也是通过下标来访问的
7). 能够一下清除所有数据
8). 强制调整数组元素的个数以及数值
9). 将数组的容量进行人为的扩大
10). 将两个Vector数组的值进行整体性交换 -
缺点: Vector的操作简单,容易上手,是数组的"升级版",但是Vector的每次自动扩容都是增加当前空间的50%(第一次除外);会消耗大量的空间与时间,所以小数据使用Vector还是很高效的.
使用步骤:
-
加入头文件
#include<vector> using namespace std;
-
Vector数组的初始化
//1. 直接赋值 vector <int> A1 {1,2,3,4,5}; //一维 vector <vector <int>> A2 {{1,2,3},{1,2,3}};//二维 //2. 不带参数构造 vector <int> A1;//空的数组,长度为0(size()为0)可以用push_back(elem)输入元素 //3. 带参数构造 vector <int> A2(10); //10个数据全为0 vector <int> A3(10,1);//10个数据全为1 //4. 通过同类型的vector初始化 vector <int> A1(5,1); vector <int> A2(A1); //通过A1来初始化A2
-
访问
-
通过地址访问
///通过地址访问 vector<int> A1 {1,2,3,4,5}; //一维 vector<int>::iterator k=A1.begin();//返回第一个元素的地址 cout<<*k<<endl; //输出1 cout<<*(k+1)<<endl; //输出2 vector<int>::iterator k=A1.end(); //返回最后一个元素的下一位地址 cout<<*(k-1)<<endl; //输出5
-
通过下标访问
///通过下标访问 vector<int> A1 {1,2,3,4,5}; //一维 cout<<A1.at(0)<<endl; //输出为1
-
-
增,删
-
插入,删除(栈顶)
///添加,删除 A.pop_back(); //删除最后一个元素 A.push_back(elem); //在尾部添加一个元素
-
特定位置插入删除
///特定位置插入删除 vector<int> A1 {1,2,3,4,5}; //一维 vector<int>::iterator k=A1.begin();//下标从0开始 A1.insert(k+1,9); //A1={1,9,2,3,4,5} A1.erase(k+1); //A1={1,3,4,5}
-
-
获取数组的长度
///获取长度或者判断数组是否为空 vector<int> A1 {1,2,3,4,5};//一维 cout<<A1.size()<<endl;//输出5 cout<<A1.empty()<<endl;//输出0
-
其他用法
///返回可用总元素 A.capacity(); //返回A在内存中总共可以容纳的元素个数 ///强制调整元素个数以及数值 A.resize(10); //将A的现有元素个数调至10个,多则删,少则补,其值随机 A.resize(10,2); //将A的现有元素个数调至10个,多则删,少则补,其值为2 ///将数组扩容 A.reserve(100); //将A的容量(capacity)扩充至100,也就是说现在测试A.capacity();的时候返回值是100.这种操作只有在需要给A添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当A的容量不足时电脑会自动扩容,当然这必然降低性能) ///将Vector数组A,B的元素进行整体交换 A.swap(B); //B为向量,将A中的元素和B中的元素进行整体性交换
-
几种重要的算法,使用时需要包含头文件:
#include < algorithm >
代码如下(示例): #include<algorithm> (1)sort( A.begin() , A.end() ); //对a中的从A.begin()(包括它)到A.end()(不包括它)的元素进行从小到大排列 (2)reverse(A.begin(),A.end()); //对A中的从A.begin()(包括它)到A.end()(不包括它)的元素倒置,但不排列,如A中元素为1,3,2,4,倒置后为4,2,3,1 (3)copy(A.begin(),A.end(),B.begin()+1); //把A中的从A.begin()(包括它)到A.end()(不包括它)的元素复制到B中,从B.begin()+1的位置(包括它)开始复制,覆盖掉原有元素 (4)find(A.begin(),A.end(),10); //在A中的从A.begin()(包括它)到A.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
————————————————
版权声明:本文为CSDN博主「\菜鸟cc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/C_1223_/article/details/114540355-
这篇关于c++头文件之Vector的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20获取apk的md5值有哪些方法?-icode9专业技术文章分享
- 2024-11-20xml报文没有传 IdentCode ,为什么正常解析没报错呢?-icode9专业技术文章分享
- 2024-11-20如何知道代码有没有进行 Schema 验证?-icode9专业技术文章分享
- 2024-11-20Mycat教程:新手快速入门指南
- 2024-11-20WebSocket入门:轻松掌握WebSocket基础
- 2024-11-19WebSocket入门指南:轻松搭建实时通信应用
- 2024-11-19Nacos安装资料详解:新手入门教程
- 2024-11-19Nacos安装资料:新手入门教程
- 2024-11-19升级 Gerrit 时有哪些注意事项?-icode9专业技术文章分享
- 2024-11-19pnpm是什么?-icode9专业技术文章分享