vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。

vector 是C++ STL的一个重要成员,使用它时需要包含头文件: #include<vector>

构造函数 语法: 

  vector();vector( size_type num, const TYPE &val );vector( const vector &from );vector( input_iterator start, input_iterator end );

变量声明:

1 例:声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。

2 例:用vector代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即:vector <int *> a 或者 vector<vector<int>> vec。同理想用向量代替三维数组也是一样,vector <int**>a;再往上面依此类推.

具体的用法以及函数调用:

vector<int> a;           //无参数 - 构造一个空的vector,
vector<int> a(10);       //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
vector<int> a(10,1);     //定义了10个整型元素的向量,且给出每个元素的初值为1
vector<int> a(b);        //用b向量来创建a向量,整体复制性赋值, 拷贝构造
vector<int> v3=a ;       //移动构造
vector<int> a(b.begin(),b.begin+3);   //定义了a值为b中第0个到第2个(共3个)元素
int b[7]={1,2,3,4,5,9,8};
vector<int> a(b,b+6);    //从数组中获得初值,b[0]~b[5]

vector对象的几个重要操作,举例说明如下:

    (1)a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a(2)a.assign(4,2);        //是a只含4个元素,且每个元素为2(3)a.back();             //返回a的最后一个元素(4)a.front();            //返回a的第一个元素(5)a[i];                 //返回a的第i个元素,当且仅当a[i]存在2013-12-07(6)a.clear();            //清空a中的元素(7)a.empty();            //判断a是否为空,空则返回ture,不空则返回false(8)a.pop_back();         //删除a向量的最后一个元素(9)a.erase(a.begin()+1, a.begin()+3);  //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)(10)a.push_back(5);      //在a的最后一个向量后插入一个元素,其值为5(11)a.insert(a.begin()+1, 5);         //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4(12)a.insert(a.begin()+1, 3,5);       //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5(13)a.insert(a.begin()+1,b+3, b+6);   //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8(14)a.size();            //返回a中元素的个数;(15)a.capacity();        //返回a在内存中总共可以容纳的元素个数(16)a.resize(10);        //将a的现有元素个数调至10个,多则删,少则补,其值随机(17)a.resize(10, 2);      //将a的现有元素个数调至10个,多则删,少则补,其值为2(18)a.reserve(100);      //将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能) (19)a.swap(b);           //b为向量,将a中的元素和b中的元素进行整体性交换(20)a.begin();           // 返回指向容器第一个元素的迭代器(21)a.end();             // 返回指向容器最后一个元素的迭代器(22)a==b;                //b为向量,向量的比较操作还有!=,>=,<=,>,<
(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,若存在返回其在向量中的位置

错误的操作:

//这种做法以及类似的做法都是错误的。刚开始我也犯过这种错误,后来发现,下标只能用于获取已存在的元素,而现在的a[i]还是空的对象

vector<int> a;
for(int i=0;i<10;i++)a[i]=i;

C++11 关与vector的新增特性:

c++11 对vector的扩展主要有:

a.cbegin();    // 返回指向容器中第一个元素的const_iterator
a.cend();      // 返回指向容器中最后一个元素的const_iterator
a.crbegin();   // 反转迭代器, 返回指向容器中最后一个元素的const_iterator
a.crend();     // 反转迭代器, 返回指向容器中第一个元素的const_iterator
a.emplace();   // 相对于insert功能,但比它更有效率
a.emplace_back(); //相对于push_back, 但比它更有效率

emplace_back能通过参数构造对象,不需要拷贝或者移动内存,相比push_back能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升。 
  由此,在大多数情况下应该优先使用emplace_back来代替push_back。

例子:

#include <iostream>
#include <vector>int main ()
{std::vector<int> myvector = {10,20,42,33,50};std::cout << "myvector contains:";// test cbegin,cendfor (auto it = myvector.cbegin(); it != myvector.cend(); ++it)std::cout << ' ' << *it;std::cout << '\n';// test crbegin, crendfor (auto it = myvector.crbegin(); it != myvector.crend(); ++it)std::cout << ' ' << *it;std::cout << '\n';return 0;
}
Output:
myvector contains: 10 20 42 33 50
50 33 42 20 10

emplace和emplace_back例子:

#include <iostream>
#include <vector>// reference: http://www.cplusplus.com/reference/vector/vector/emplace_back/
int test_emplace_1()
{/*template <class... Args>void emplace_back (Args&&... args);*/std::vector<int> myvector = { 10, 20, 30 };myvector.emplace_back(100);myvector.emplace_back(200);std::cout << "myvector contains:";for (auto& x : myvector)std::cout << ' ' << x;std::cout << '\n';// output 10 20 30 100 200
}int test_emplace_2()
{/*template <class... Args>iterator emplace (const_iterator position, Args&&... args);*/std::vector<int> myvector = { 10, 20, 30 };// return an iterator that points to the newly emplaced element. auto it = myvector.emplace(myvector.begin(), 100);myvector.emplace(it, 200);myvector.emplace(myvector.end(), 300);std::cout << "myvector contains:";for (auto& x : myvector)std::cout << ' ' << x;std::cout << '\n'; // output: 10 200 100 20 30 300
}int main(void)
{test_emplace_1();test_emplace_2();return 0;
}

https://blog.csdn.net/imJaron/article/details/77975370

C++ vector的用法总结(整理)相关推荐

  1. c语言pair的用法,C++ pair的基本用法总结整理

    1,pair的应用 pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存.另一个应用是,当一个函数需要返回2个数据的时候, ...

  2. matlab i型级联filter,Matlab中filter,conv,impz用法(最新整理)

    <Matlab中filter,conv,impz用法(最新整理)>由会员分享,可在线阅读,更多相关<Matlab中filter,conv,impz用法(最新整理)(5页珍藏版)> ...

  3. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  4. 【转】C++学习二 vector的用法(使用sort对于vector排序)

    一.vector的介绍 vector是C++里面的一个容器,也是我们数学上面理解的向量,有一些比较常见的操作. 二.vector的定义 #include<vector> using nam ...

  5. vector 清空 Linux,STL容器vector基础用法小结

    STL容器vector基础用法小结根据<ACM程序设计>写的,用实例展示vector用法. 方法:push_back(), insert(), erase(), clear(), size ...

  6. c语言中vector的用法,c中vector的用法

    c中vector的用法的用法你知道吗?下面小编就跟你们详细介绍下c中vector的用法的用法,希望对你们有用. c中vector的用法的用法如下: 1 基本操作 (1)头文件#include. (2) ...

  7. C++--vector()的用法

    vector()的用法 概念 vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器.vector 是C++ STL的一个重要成员,使用它时需要包含头文件: #include ...

  8. c语言vector+erase用法,vector.erase用法注意事项

    转自->这里 vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(iterat ...

  9. JAVA中的Vector类用法整理

    新的一天,新的知识: 和C语言一样,java中的数组只能保存固定数目的元素,且必须把所有需要的内存单元一次性申请出来. 而不能创建数组再追加数组元素数量.为了解决这个问题,Java中引入了向量类Vec ...

最新文章

  1. 前端开发群技术文章分享汇总
  2. OCP之5 管理数据库存储结构
  3. Cent OS 重置root密码
  4. 地方税务局行政效能管理(行政审批)整体解决方案
  5. python selenium等待特定网页元素加载完毕
  6. 信号与系统——初识信号的原理与分类
  7. 认知无线电----能量检测法原理介绍及MATLAB实现
  8. LabVIEW与Microsoft Windows的兼容性
  9. 咸鱼Maya笔记—Maya 多边形建模
  10. html学生项目总结反思,小学月考总结与反思(精选10篇)
  11. WebStorm使用-显示隐藏文件
  12. 移动开发技术(Android)——实验8 SQLite数据库的使用
  13. win10文件夹当作服务器,win10文件夹加密不了怎么办_网站服务器运行维护,win10
  14. 十大游戏开发引擎优缺点对比
  15. Android如何实现APP自动更新
  16. C 语 言制定了一套 ANSI 标准
  17. 计算机flash拉开效果,使用Flash制作卷轴展开效果
  18. A COMBINED CORNER AND EDGE DETECTOR
  19. python基础之字符串(七)
  20. iPhone 15 高端版本万元起步;华为授权 OPPO 使用其 5G 技术;DeepMind 推出 AI 编剧|极客头条

热门文章

  1. 什么是Race Condition?
  2. 几款实用的内网穿透工具,推荐
  3. Mems电容式加速度计的种类(一)
  4. ZPL命令打印出的一维码扫码枪不识别问题
  5. Python调用电脑麦克风录音
  6. C#【必备技能篇】VS2019 使用C/C++ 生成DLL 文件,并用 C/C++、C#调用DLL
  7. H3C设备 配置Web管理
  8. Altium Designer 20 安装方法及步骤
  9. 七步带你认识计算机视觉(Computer Vision)
  10. JSRUN, 前端教程大家一起来编写