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之所以被认为是一个容器,是因为它能够像容器一样存 ...
随机推荐
- IDEA 常用插件
Maven Helperp3pauto filling Java call argumentsCamelCaseVisualVM LauncherTranslation.ignoreGenerateA ...
- python shutil模块&random模块
shutil模块 import shutil shutil.copyfileobj(open("os_.py", "r"), open("os_2.p ...
- Spring的回滚问题
再说下声明式事务和注解事务回滚的原理:当被切面切中或者是加了注解的方法中抛出了RuntimeException异常时,Spring会进行事务回滚.默认情况下是捕获到方法的RuntimeExceptio ...
- window Linux 双系统安装
我是先安装的win10,然后在其基础上又安装了Ubuntu 16.04,为了今后再次安装方便,这里记录一下安装过程. 我在安装时主要参考了文章:https://blog.csdn.net/flyyuf ...
- [Docker] 容器开发环境最佳实践理论
保持 image 小 选择合适的 base image. 使用 multi-stage 构建. https://docs.docker.com/develop/develo ...
- linux 环境变量 转
https://www.cnblogs.com/aaronLinux/p/5837702.html export PATH=/home/one/:$PATH export PATH=$PATH:/ho ...
- 吴裕雄 python深度学习与实践(18)
# coding: utf-8 import time import numpy as np import tensorflow as tf import _pickle as pickle impo ...
- Word 通过尾注插入参考文献
一步:把鼠标移到论文要插入的位置,然后点击引用: 第二步:点击插入尾注: 第三步:点击视图,接着点击草稿: 第四步:再次点击引用,接着点击显示备注,左下角出现尾注矩形框菜单栏,选择尾注分隔符,可以删除 ...
- .Net23种设计模式
C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些 ...
- cv2.error: openCV报错
运行openCV程序,出现了.cv2.error: OpenCV(4.1.0) D:\Build\OpenCV\opencv-4.1.0\modules\imgproc\src\color.cpp:1 ...