http://hi.baidu.com/phpok/item/b2df4db0ab6925f262388eab

最近有几个好友问到我C++中的vector到底怎么理解它,很多人没有接触过它。一时间都被搞的晕头转向。其实vector很好理解,它就是可以动态创建对象元素个数的数组。如果你不知道什么是数组那就别浪费时间看下去。因为在C++中数组元素个数的定义只能够使用常量值,或在编译时就可以获得的值。列如

const int ay=5; int array[ay];

或者

int array[5];

不可以使用

int ay; int array[ay];

这种定义的方式。所以,数组元素的个数在C++中除了使用NEW表达式(比较麻烦)之外是不可以动态定义的。那么如何解决这个问题呢。

C++推出了标准库vector

在使用它的时候需要首先引头文件

#include <vector> using std::vector;

接下来用几个简单的列子来说明它和数组的区别。

01  /********************************************************************

02       创建时间:      2009/09/21 21:11

03       文件名称:      test1.cpp

04       文件后缀:      cpp

05       文件作者:      QianLiang

06   07       =====================================================

08       功能说明:      说明什么是vector以及它与数组的区别

09       -----------------------------------------------------------------

10       其他说明:

11   *********************************************************************/

12  #include <iostream>

13  #include <vector>

14  using namespace std;

15

16  int main()

17   {

18      /* 数组:静态定义元素个数 */

19       const int ay=5;

20      int   array1[ay];

21

22      /* vector:动态定义元素个数 */

23      int     vy;

24       cin>>vy;

25      vector<int>     ivec1(vy);

26

27      /* 测试它们每个元素的默认值,这里假设上面的vy输入为5 */

28      for (int i=0;i<ay;++i)

29       {

30           cout<<"数组:\t"<<array1[i]<<endl; //它输出的全是随即数

31           cout<<"vector:\t"<<ivec1[i]<<endl;//它将全部元素初始化为0

32           cout<<endl; 33       }

34

35      /* 测试他们的赋值安全性 */

36      int array2[6];

37      //array1=array2;    ←这条语句就是错误的.而

38      vector<int>     ivec2(3);

39       ivec1=ivec2; //这条语句是正确的因为它可以动态的确定元素个数

40

41

42      /* 仅仅以上三条测试就足以说明使用vector比数组要安全的多,

43          第一它是动态的管理元素个数,这就避免了许多越界问题的发生

44          第二当未对它们进行初始化操作的时候vector会自动为每个元素添加

45          该类型的安全默认值.这也避免了若干问题的发生.

46

47       接下来看看vector的使用,它有4个构造函数

48       vector<T> v1;         ←vector保存类型为T的对象.默认构造函数v1为空

49       vector<T> v2(v1);     ←V2是V1的一个副本.

50       vector<T> v3(n,i);     ←v3包含n个值为i的元素.

51       vector<T> v4(n);     ←v4含有值初始化的元素的n个副本.*/

52

53      /* vector的操作 */

54       cout<<ivec1.empty();//如果ivec1为空则返回true(1),否则返回false(0)

55       cout<<ivec1.size();//返回ivec1中元素的个数;

56       ivec1.push_back(t) //在ivec1的末尾增加一个值为t的元素.

57

58      return 0;

59   }

什么时候使用vector什么时候使用数组呢?

**由于vector是标准库,而数组则是内置类型。所以如果你追求程序的执行效率的话那就用数组吧。 **可确定数组元素个数的时候尽量使用数组。 **对于指针以及NEW操作符迷糊的时候使用vector,因为它内置有内存管理器。

下面是一个关于vector的编程习题。

01  /********************************************************************

02       创建时间:      2009/09/21 21:18

03       文件名称:      习题3-13.cpp

04       文件后缀:      cpp

05       文件作者:      QianLiang

06

07       =====================================================

08       功能说明:      读一组整数到vector对象,计算并输出每对相邻元素的和.如

09                    果读入元素个数为奇数,则提示用户最后有一个元素没有求和

10                    ,并输出其值.然后修改程序:首尾元素两两配对(第一个和最

11                    后一个,第二个和倒数第二个,以次类推),计算每对元素的和

12                    并输出.

13       -----------------------------------------------------------------

14       其他说明:

15   *********************************************************************/

16  #include <iostream>

17  #include <vector>

18  using namespace std;

19

20  int main()

21   {

22      vector<int>     ve;

23      int     a(0);

24       const    int     CI(2);

25

26       cout<<"输入整数,程序计算它们相邻数的和.输入0时程序开始计算"<<endl;

27      /* 请求用户输入整数,每个数字为ve的一个元素,如果用户输入0

28          程序将停止请求*/

29      while (cin>>a && a!=0)

30       {

31           ve.push_back(a);

32       }

33

34      /* 统计ve的元素个数减1后赋给变量b */

35      int b(ve.size()-1);

36

37      /* 判断用户是否直接输入了0,或是键盘上的任意键 */

38      if (ve.size()==0)

39       {

40           cout<<"无元素"<<endl;

41       }

42

43      /* 判断用户输入元素的个数是否为奇数 */

44      else if (ve.size()%CI != 0)

45       {

46          /* 判断用户是否只输入了一个数字 */

47          if (ve.size()==1)

48           {

49               cout<<"一个元素无法计算"<<endl;

50           }

51          else

52           {

53               cout<<"您输入的元素个数是奇数,最后一个数字无法相加"<<endl;

54              for (int i=0;i<b;i+=CI)

55               {

56                   cout<<"第"<<i+1<<"组数:"<<ve[i]+ve[i+1]<<endl;

57               }

58

59               cout<<"您输入的最后一个元素为:"<<ve[b]<<endl;

60           }

61       }

62

63      /* 判断用户输入的元素个数是否为偶数 */

64      else if (ve.size()%CI == 0)

65       {

66          for (int i=0;i<b;i+=CI)

67           {

68               cout<<"第"<<i+1<<"组数:"<<ve[i]+ve[i+1]<<endl;

69           }

70       }

71

72      return     0;

73   }

C++ vector是什么?应该如何理解相关推荐

  1. Why Vector Clock are Easy or Hard?

    通过实际例子来阐述vector clock其实是容易理解的, easy 同样通过实际例子来描述在使用vector clock时会遇到哪些难以解决的问题, hard Why Vector Clocks ...

  2. Vector使用方法简单整理

    使用vector,需要引用vector库: #include<vector> 首先,创建一个可以容纳int的vector变量--arr: vector<int> arr; 接着 ...

  3. 对ORBslam2前端ORBextractor点提取的理解(理解每行代码在干啥)

    前言:受高博的启发,想自己写一个完整的slam,不知如何动手,想到将orbslam2拆分,按照自己的理解组装一个slam(先整出个视觉里程计吧),所以开始研究orbslam2前端的代码,在slam14 ...

  4. 集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet

    集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet 一.LinkedList 1.L ...

  5. 【Unity】如何理解Vector3.normalized 归一化向量 以及 向量方向计算

    [Unity]如何理解Vector3.normalized 归一化向量 以及 向量方向计算 normalized的概念 Vector3.normalized : 返回大小为1的向量(只读).规范化时, ...

  6. tensorfllow MNIST机器学习入门

    MNIST机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手.如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以阅读 ...

  7. c++模板库的一些基本使用

    c++模板库的一些基本使用 1 vector常见用法   1.1 vector定义 vector<typename>name(可以理解为一维的变长数组) vector<vector& ...

  8. STL中的priority_queue(优先队列)

    引言 priority_queue 也是一种队列,queue 有的性质和操作它也有(但是没有back操作了),唯一不同就是它可以自动排序: 它的本质是通过堆实现的,在堆排序中会见到它,下面说一下它的用 ...

  9. 【2019暑假刷题笔记-STL绪论】总结自《算法笔记》

    目     录 一.vector的常见用法 二.set的常见用法 三.string的常见用法 四.map的常见用法 一.vector的常见用法 vector是一种可变长数组,常用于使用vector通过 ...

  10. TensorFlow 中文文档 介绍

    介绍 本章的目的是让你了解和运行 TensorFlow 在开始之前, 先看一段使用 Python API 撰写的 TensorFlow 示例代码, 对将要学习的内容有初步的印象. 这段很短的 Pyth ...

最新文章

  1. 使用swagger编写开发接口文档
  2. Web框架——Flask系列之json、jsonify模块的使用(十四)
  3. Oracle 11.2.0.3 [INS-41112] Specified network interface doesnt maintain connectivity across cluster
  4. LeetCode-203:移除链表元素
  5. redis DB操作
  6. svn 使用TortoiseSVN server搭建本地SVN服务器
  7. 通讯超时什么意思_威伦触摸屏通讯报错了怎么办?
  8. 金蝶站点重新输入服务器ip,金蝶KIS客户端和服务器不在同一IP段互相访问
  9. 腾讯等技术大佬分享的高可用架构干货,全在这里了
  10. 模板引擎工作原理_zuma致:新手SEO须知搜索引擎工作原理
  11. 本科毕业查重过程分享与经验
  12. 软考高项-质量管理论文范文
  13. SQL分组排序函数(组内分别排序)
  14. unity urp 实现车漆效果
  15. C语言知识体系框架图
  16. mysql高级查询之性能分析explain和日志查看
  17. 搬砖方法论:上帝对象(God Object)
  18. 逍遥模拟器上传服务器文件,逍遥模拟器后台操作
  19. aiml的中文适配aiml_cn
  20. Docker部署Overleaf包含中文字体与全套texlive镜像

热门文章

  1. html里面怎么引别的页面_如何在一个html文件中引入另一个html文件?
  2. java对mysql进行查找替换_java对mysql的增删改查
  3. solve det(I + uv^t)
  4. pytorch创建dataloader和可视化图片
  5. Java判定1到4可以组成多少个互不相同且无重复的三位数
  6. Frame中添加一个黄色的panel
  7. tab weui 页面切换_weui tabbar 到底怎么用啊?tab页面为什么不能切换?
  8. python中pandas计数_python – Pandas:根据条件计数进行分组
  9. 找到源码了!使用python+机器学习方法进行情感分析(详细步骤)
  10. 看漫画学python_《看漫画学Python:有趣、有料、好玩、好用(全彩版)(博文视点出品)》(关东升)【摘要 书评 试读】- 京东图书...