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之所以被认为是一个容器,是因为它能够像容器一样存 ...
随机推荐
- 一些常见的Java面试题 & 面试感悟
< 前言 > 近期在面试,深感这个行业的浮躁,一些菜不辣基的弱鸡开出的工资待遇要求,超过了我.不知道他们是怎么拿到那么高的工资的,难道是他在公司有亲戚朋友吗?有后台吗?是行业热钱真的过多了 ...
- MySQL(Python+ORM)
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- sublime text3 离线安装插件方法 package control
package control 在线安装 一般会出现各种错误 不推荐 离线安装 推荐step1: 打开package control官网https://packagecontrol.io/ step2 ...
- 17Linux_mariadb_PXE+Kickstart
Mariadb mariadb-client mariadb-server # yum groupinstall mariadb mariadb-client mariadb-server -y # ...
- Windows下查看自己电脑的网关mac以及手动获取新的地址
场景:正在上班时,工作电脑突然无法连接网络了.查看配置发现DNS服务器地址被分配到了192.168.1.1,瞬间懵了? 过程:(1)进入cmd.使用ipconfig /all查看网关地址; (2)使用 ...
- 超简单(两步)-微信怎么实现打开外部浏览器,下载app,打开网页URL
现在微信渠道可以说是拉新最快的渠道,因为微信具备强裂变性.但是目前微信对第三方下载链接的拦截是越来越严格了,那么想要在微信内肆无忌惮地推广链接就需要用到微信跳转浏览器的接口,那如何获取该接口呢? ...
- MyEclipse2014破解版安装教程
下载安装包和破解程序脚本 1.下载地址 链接:https://pan.baidu.com/s/1XuMweEz602zcoGqwPb2xTA 提取码:idsx 两个文件:myeclipse-pro- ...
- ARTS打卡计划第一周-Share-系统字典模块的设计
在软件开发的过程,经常有一些类型的字段信息:性别.学历.职级.车辆类别.公司类型.结算类型等.这些字段有2个特征:1是字段可选的类型是有限,2是字段可能会变化,我们把这种字段描述为字段字段. 本篇文 ...
- C# webapi简单学习
创建WebApi项目: 在VS工具中创建一个ASP.NET Web应用程序 选择Webapi 一个webapi项目就创建好了 这里简单的写一个post和get两种请求的方法,由于post请求参数需要参 ...
- opencv 之 transformation
getAffineTransform() : calculates an affine transform from three pairs of the corresponding points. ...