C++ vector动态数组
#include<vector>头文件
vector类称作向量类
百度百科的解释:https://baike.baidu.com/item/vector/3330482
我喜欢把知识点拿出来实际操作。
提纲挈领的总结实际工程中用到的方式方法,最后列表展示出来,补充一些常用实际案例,最直接。
既方便看,又方便提取。
之前不了解动态数组vector的事,感觉像一座大山,没有办法迈过去。可是当深入的了解并使用到它的时候,觉得他真的是太便捷了。
比如说一般的数组a,一旦我们定义好了,就不能对里面的排序进行随意的增删改(或者说增删改的代价太大):
1.因为数组a在创建的时候,系统自动给它分配了一段固定长度内存,无法重定义数组的大小。
2.值写进去可以被抹掉,但那一段内存始终被占用着,无法实现「值没了,后1位变量前进一格」。
3.数组a可以被声明为空,如a[],但是在末尾添加数值还是很局限。而动态数组vec可以实现任意类型的push_back。
……
我目前探索到的动态数组vec:vec内变量个数可变,可随意插入,可随你删除,数组尾部添加动态变量很便利…
总之,很赞。
很初级的操作:
|
string类型 vector<string> s1; vector<string> s2; s1.push_back(s2); |
结构体类型 Struct ST st; vector<ST> st1; vector<ST> st2; st1.push_back(st2); |
|
迭代器访问,遍历 (类似指针) |
vector<int>::iterator it; for(it=vec.begin();it!= vec.end();it++) cout<<*it<<endl; |
|
vector遍历 |
for(int i=0; i<vec.size(); i++) |
常用的初始化及函数:
|
初始化vector |
vector<int>v1; |
初始化为空 |
|
vector<int>v2(v1); |
用另一个v1初始化v2 |
|
|
vector<int>v3(n, 3); vector<string>v3(5, "hello"); |
初始化为n个3 5个"hello" |
|
|
vector<int>v4(10); |
初始化为10个空值 |
|
|
int a[10]={1,2,3,4,5,6}; vector<int>v5(a,a+6); vector<int>v5(&a[0],&a[6]); |
初始化为:已有数组a[0,6),即a[0,5] |
|
|
增 |
vec.push_back(a); |
向vector尾部添加元素a |
|
vec.insert(pos,elem); |
在pos处插入elem iterator insert(iterator it,const T& x): |
|
|
vec.insert(pos,n,elem); |
在pos处插入n个elem insert(iterator it,int n,const T& x): |
|
|
vec.insert(pos,beg,end); |
在pos处插入[beg, end)区间的所有元素 insert(iterator it,const_iterator first,const_iterator last): |
|
|
删 |
vec.pop_back(); |
删除last最后一个元素 |
|
vec.clear(): |
清空所有元素 |
|
|
vec.erase(v.begin(),v.begin()+3); |
删除[first,last)中元素 erase(iterator first,iterator last): |
|
|
erase(iterator it): |
删除迭代器指向元素 |
|
|
遍历 |
vec.begin();地址 |
first返回头指针,指向第一个元素 |
|
vec.end();地址 |
last+1,返回尾指针,指向一个不存在元素 |
|
|
vec.front();值 |
返回首元素 |
|
|
vec.back();值 |
返回尾元素 |
|
|
vec.rbegin();地址 |
last返回尾指针,指向第一个元素 |
|
|
vec.rend();地址 |
first-1,返回首指针之前,指向一个不存在元素 |
|
|
vec.at(int pos); |
返回pos位置元素的引用 |
|
|
大小 |
vec.empty(); |
判断是否为空,空true,否则返回false; |
|
vec.size(); |
获取vector中元素个数 |
|
|
vec.capacity(); |
获取容器分配的存储空间 |
|
|
vec.resize(n+m); |
调整vec的大小变为n+m |
|
|
其他 |
加头文件#include<algorithm> |
—— |
|
sort(vec.begin(),vec.end()); |
对元素排序 |
|
|
reverse(vec.begin(), vec.end()); |
反转容器 |
|
|
swap(vec[i],vec[j]); |
交换元素 |
参考示例,见蒲公英110老师的文章。
https://www.cnblogs.com/zsq1993/p/5929806.html
C++ vector动态数组的更多相关文章
- C++向量 vector动态数组
需要包含头文件, #include <vector> using namespace std; vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所 ...
- Vector(动态数组)怎么用咧↓↓↓
定义方式:vector<int> a; //二维vector<int>a[100] 在末尾压入容器:a.push_back(x);//二维 a[i].push_back(x) ...
- 八连通(vector动态数组法)
题目和一般的八连通一样,但行数和列数未定,相乘对于1e6,直接开a[1e6][1e6]的数组肯定会爆内存.用二维的动态vector就能很好的解决这个问题 #include<bits/stdc++ ...
- C++ Vector 动态数组
Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...
- vector动态数组
vector是STL模板库中的序列式容器,利用它可以有效地避免空间的浪费. 创建vector容器 vector< int >v:vector< char >:vector< ...
- vc++简单的vector动态数组实现
#ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- 学习日记--用Vector(向量)实现动态数组
Vector的使用方法: 能在添加元素时增加长度的数组称为动态数组或可变长数组.相对地,必须事先指定长度,只能容纳一定数量元素的数组称为静态数组.下面分享一下如何借助STL(标准模板库)中的Vecto ...
- vector:动态数组
vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确.它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存 ...
随机推荐
- 在windows 10 上使用aspnet_regiis.exe -i 命令报 “此操作系统版本不支持此选项” 的解决办法
用CMD窗口在C:\Windows\Microsoft.NET\Framework64\v4.0.30319下使用命令aspnet_regiis -i 报错: “此操作系统版本不支持此选项” .结果是 ...
- 用原生js简单模仿angular的依赖注入
大家都知道angular 依赖注入很神奇,跟我们平常写代码的风格思维差别很大,不过仔细分析确是一个很有意思的东西,依赖注入早期也叫依赖倒置,是java中有的.废话不多少直接上例子 本帖属于原创,转载请 ...
- ActiveMq Windows 配置优化
最近ActiveMQ 5.15.3 会报 OutofMemory的错误 在 wrapper.conf中 #wrapper.java.additional.8=-Dorg.apache.activemq ...
- 【读书笔记】segment routing mpls数据平面-2
- JS实现简单斗地主效果
let play = document.querySelectorAll(".play"); let dizhupai = document.getElementById(&quo ...
- react-redux的使用
在react-redux 框架中,给我提供了两个常用的API来配合Redux框架的使用,其实在我们的实际项目开发中,我们完全可以不用react-redux框架,但是如果使用此框架,就如虎添翼了. 我们 ...
- php导出excel不使用科学计数法
在变量前后拼接上制表符 foreach($orderList as $k=>$v){ $orderList[$k]['pos_id'] = "\t".$v['pos_id'] ...
- 使用c#调整图片质量
//参数: 原始图片,保存路径,压缩比 private void CompressImage(MagickNet.Image img,string toPath, long ratio) { usin ...
- cat <<EOF
1.cat >file记录的是键盘输入,相当于从键盘创建文件,并且只能创建新文件,不能编辑已有文件.>是数据重导向,会将你输入的文本内容输出到file中. 2.cat <<EO ...
- 通过代码启动appium服务
如果选择npm安装的最新版appium 1.8.0以上版本,启动appium的时候,你会发现无法使用Node.js命令 这里给出两种方法来启动appim: 方法一: /** * 使用AppiumSer ...