C++ vector是什么?应该如何理解
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是什么?应该如何理解相关推荐
- Why Vector Clock are Easy or Hard?
通过实际例子来阐述vector clock其实是容易理解的, easy 同样通过实际例子来描述在使用vector clock时会遇到哪些难以解决的问题, hard Why Vector Clocks ...
- Vector使用方法简单整理
使用vector,需要引用vector库: #include<vector> 首先,创建一个可以容纳int的vector变量--arr: vector<int> arr; 接着 ...
- 对ORBslam2前端ORBextractor点提取的理解(理解每行代码在干啥)
前言:受高博的启发,想自己写一个完整的slam,不知如何动手,想到将orbslam2拆分,按照自己的理解组装一个slam(先整出个视觉里程计吧),所以开始研究orbslam2前端的代码,在slam14 ...
- 集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet
集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet 一.LinkedList 1.L ...
- 【Unity】如何理解Vector3.normalized 归一化向量 以及 向量方向计算
[Unity]如何理解Vector3.normalized 归一化向量 以及 向量方向计算 normalized的概念 Vector3.normalized : 返回大小为1的向量(只读).规范化时, ...
- tensorfllow MNIST机器学习入门
MNIST机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手.如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以阅读 ...
- c++模板库的一些基本使用
c++模板库的一些基本使用 1 vector常见用法 1.1 vector定义 vector<typename>name(可以理解为一维的变长数组) vector<vector& ...
- STL中的priority_queue(优先队列)
引言 priority_queue 也是一种队列,queue 有的性质和操作它也有(但是没有back操作了),唯一不同就是它可以自动排序: 它的本质是通过堆实现的,在堆排序中会见到它,下面说一下它的用 ...
- 【2019暑假刷题笔记-STL绪论】总结自《算法笔记》
目 录 一.vector的常见用法 二.set的常见用法 三.string的常见用法 四.map的常见用法 一.vector的常见用法 vector是一种可变长数组,常用于使用vector通过 ...
- TensorFlow 中文文档 介绍
介绍 本章的目的是让你了解和运行 TensorFlow 在开始之前, 先看一段使用 Python API 撰写的 TensorFlow 示例代码, 对将要学习的内容有初步的印象. 这段很短的 Pyth ...
最新文章
- 使用swagger编写开发接口文档
- Web框架——Flask系列之json、jsonify模块的使用(十四)
- Oracle 11.2.0.3 [INS-41112] Specified network interface doesnt maintain connectivity across cluster
- LeetCode-203:移除链表元素
- redis DB操作
- svn 使用TortoiseSVN server搭建本地SVN服务器
- 通讯超时什么意思_威伦触摸屏通讯报错了怎么办?
- 金蝶站点重新输入服务器ip,金蝶KIS客户端和服务器不在同一IP段互相访问
- 腾讯等技术大佬分享的高可用架构干货,全在这里了
- 模板引擎工作原理_zuma致:新手SEO须知搜索引擎工作原理
- 本科毕业查重过程分享与经验
- 软考高项-质量管理论文范文
- SQL分组排序函数(组内分别排序)
- unity urp 实现车漆效果
- C语言知识体系框架图
- mysql高级查询之性能分析explain和日志查看
- 搬砖方法论:上帝对象(God Object)
- 逍遥模拟器上传服务器文件,逍遥模拟器后台操作
- aiml的中文适配aiml_cn
- Docker部署Overleaf包含中文字体与全套texlive镜像
热门文章
- html里面怎么引别的页面_如何在一个html文件中引入另一个html文件?
- java对mysql进行查找替换_java对mysql的增删改查
- solve det(I + uv^t)
- pytorch创建dataloader和可视化图片
- Java判定1到4可以组成多少个互不相同且无重复的三位数
- Frame中添加一个黄色的panel
- tab weui 页面切换_weui tabbar 到底怎么用啊?tab页面为什么不能切换?
- python中pandas计数_python – Pandas:根据条件计数进行分组
- 找到源码了!使用python+机器学习方法进行情感分析(详细步骤)
- 看漫画学python_《看漫画学Python:有趣、有料、好玩、好用(全彩版)(博文视点出品)》(关东升)【摘要 书评 试读】- 京东图书...