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之所以被认为是一个容器,是因为它能够像容器一样存 ...
随机推荐
- IDL实现矢量文件裁剪栅格数据
利用ENVI_SUBSET_VIA_ROI_DOIT函数实现矢量文件裁剪栅格数据. 测试数据:栅格文件是Mercator投影,矢量文件是Geographic坐标系 infile='F:\Temp_Da ...
- GC roots
1.虚拟机栈(本地变量表)引用的对象 2.方法区静态属性引用的对象 3.方法区常量引用的对象 4.本地方法栈JNI(一般指naive方法)中引用的对象 常说的GC(Garbage Collecto ...
- SQL Server 2000 字段类型 Delphi 数据类型对照
- SpringCloud系列八:Zuul 路由访问(Zuul 的基本使用、Zuul 路由功能、zuul 过滤访问、Zuul 服务降级)
1.概念:Zuul 路由访问 2.具体内容 在现在为止所有的微服务都是通过 Eureka 找到的,但是在很多的开发之中为了规范微服务的使用,提供有一个路由的处理控制组件:Zuul,也就是说 Zuul ...
- mycat数据中间件、nginx
MyCat & Nginx 课程目标 目标1:理解MyCat分片,能够配置MyCat分片 目标2:掌握Nginx的安装与静态网站部署 目标3:掌握Nginx的静态网站部署 目标4:理解N ...
- zabbix 本地编译安装
转载地址 https://www.cnblogs.com/wangxiaoqiangs/p/5412147.html 简介: 单独整理一下 Zabbix Agent . 1.安装包选择 下载地址:ht ...
- C++字符串按照指定规则切割的功能模板类,常用的一段检测记录运行时间的代码
template <typename T> struct vector_split { typedef typename std::vector<T>::iterator it ...
- week05 codelab01 Babel ES6 webpack Nodejsserver等
Babel 他出现的原因就是很多浏览器还未完全兼容ES6 需要将你写的ES6的内容转换成ES5让浏览器兼容运行 ES5和ES6相比出现很多新内容 比如拼接字符串 ES6可以` ` 里面如果引用变量就用 ...
- 2019/4/17 Linux学习
一.Linux的文件系统 其中/prov./srv./sys 文件为文件系统,技术不过硬不要去修改:二.关于Xshell.Xft1.服务器的端口可有65535个可设置,开的越多安全性越差:2.远程登录 ...
- 解决git中upstream丢失问题Your branch is based on 'origin/xxxx', but the upstream is gone.
转自 https://blog.csdn.net/limengke123/article/details/77850134