标准库类型vector表示对象的集合,其中多有对象的类型都相同,集合中的每个对象都有一个与之对象的索引用来访问对象,需要注意的是引用不是对象,所以不存在包含引用的vector,因其用来容纳着其他对象,所以也被称为容器(container)。使用vector时需要包含适当的头文件:

#include <vector>
using std::vector;

  C++语言有类模板(class template)和函数模板,vector是一个类模板,编译器根据模板创建类或函数的过程称为实例化(instantiation),使用模板时,需要指出编译器应把类或函数实例化成哪种类型。

一、定义和初始化vector对象
  可以默认初始化vector对象,从而创建一个指定类型的空vector,也可在定义vector对象时指定元素的初始值,允许把一个vector对象的元素拷贝给另外一个vector对象,注意两个vector对象的类型必须相同。

vector<string> svec;          //默认初始化,svec不含任何元素
vector<int> ivec1;            //同上
//然后再给ivec1添加一些值
vector<int> ivec2(ivec1);     //把ivec1的元素拷贝给ivec2
vector<string> svec(ivec2);   //错误,两个vector对象类型不同   

1.1 列表初始化vector对象
  列表初始化即为用花括号括起来的0个或多个初始值被赋给vector对象:

vector<string> articles = {"a","an","the"};

1.2 创建指定数量的元素
  可以用vector对象容纳的元素数量和所有元素的统一初始值来初始化vector对象:

vector<int> ivec(10,-1);       //10个int类型元素,每个都初始化为-1
vector<string> svec(10,"hi!");

  如果只提供vector对象容纳的元素数量而没有初始值,那么库会创建一个值初始化的元素初值,并赋给容器所有元素,即在vector中直接初始化的形式是创建含有若干个值初始化的元素的vector对象。

vector<int> ivec(10);          //10个元素,每个都初始化为0
vector<string> svec(10);       //10个元素,每个都是空string对象

  可以通过花括号和圆括号,以及列表提供的值能不能用来列表初始化来判断列表是初始值还是元素数量,当列表提供的值不能作为元素的初始值,确认无法执行列表初始化后,编译器会尝试使用默认初始化vector对象,如下面的v7和v8。

vector<int> v1(10);             //v1有10个元素,每个都是0
vector<int> v2{10};             //v2有1个值为10的元素
vector<int> v3(10,1);           //v3有10个值都为1的元素
vector<int> v4{10,1};           //v4有两个值分别为10和1的元素
vector<string> v5{"hi"};        //列表初始化,v5有一个元素
vector<string> v6("hi");        //错误,不能使用字符串字面值构建vector对象
vector<string> v7(10);          //v7有10个默认初始化的元素
vector<string> v8{10,"hi"};     //v8有10个值为“hi"的元素

二、向vector对象中添加元素
  当不知道需要创建一个包含多少元素的vector对象时,可以先创建一个空vector,然后在使用vector的成员函数push_back向其中添加元素,push_back负责把一个值当成vector对象的尾元素压进vector对象的尾端,下面是一个例子,但需要注意的是循环体内部包含有想vector对象添加元素的语句,则不能使用范围for循环。

vector<int> v2;                //创建空vector对象
for (int j = 0; j != 100; ++j)v2.push_back(j);            //依次把整数值放到v2尾端

三、其他vector操作
  vector的其他操作大多数和string的相关操作类似,可以使用范围for语句处理vector对象中的所有元素:

vector<int> v{1,2,3,4,5};
for (auto &j : v)              //对于v中的每个元素,j是一个引用j *= j;                     //求元素值的平方
for (auto j : v)cout << j << " ";           //输出该元素
cout << endl;

  vector的empty和size两个成员与string的同名成员功能完全一致,empty检查vector对象是否包含元素然后返回一个布尔值,sizeze返回vector对象中元素的个数,返回值的类型是由vector定义的size_type,需要注意vector对象的类型总是包含着元素的类型。

vector<int>::size_type          //正确
vector::size_type               //错误

  另外需要注意不能通过vector对象的下标形式来添加元素,可以使用下标运算符来访问已存在的元素。

参考文献:
①C++ Primer 第五版。

【C++学习笔记】标准库类型vector相关推荐

  1. C++primer 第 3 章 字符串、向量和数组 3 . 3 标准库类型vector

    标准库类型vector表示对象的集合,其中所有对象的类型都相同.集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector"容纳着"其他对象,所以它也常被称作容器( ...

  2. C++标准库类型vector介绍

    3.3 标准库类型vector 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都拥有一个与之对应的索引,索引用于访问对象,因为vector容纳着其他对象,所以也经常被 ...

  3. C++ 标准库类型 vector

    C++ 标准库类型 vector 一.vector 的使用与定义 1.使用 vector 类型 标准库类型 vector 表示对象的集合,也称容器. #include <vector > ...

  4. go学习笔记-标准库

    标准库 名称 摘要 archive tar tar包实现了tar格式压缩文件的存取.zip zip包提供了zip档案文件的读写服务. bufio bufio 包实现了带缓存的I/O操作. builti ...

  5. Go学习笔记—标准库Context

    标准库Context ​ 由于goroutine没有父子关系,多个goroutine都是被平行的调度,所以在拉起多个goroutine后,程序的执行模型并没有维护树状结构的goroutine树,所以无 ...

  6. Linux学习笔记-标准库中的管道操作

    目录 理论 例子 理论 stdio.h里面有标志库管道操作 FILE *popen(const char* cmdstring, const char *type);返回值:成功返回文件指针,出错返回 ...

  7. 标准库类型String,Vector

    string对象中每个字符的处理: 要用到 for(声明:表达式) 语句 比如简单的打印string str中每一个字符 --- string str("hello world!!!&quo ...

  8. 谈谈两种标准库类型---string和vector

    两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...

  9. 【C++学习笔记】标准库类型string

      标准库类型string表示可变长的字符序列,使用string类型必须先包含string头文件,string定义在命名空间std. #include <string> using std ...

最新文章

  1. Linux修改主机名的两种方法
  2. Oracle EBS R12.1.1 应用克隆 - 3
  3. 使用Groovy代码执行本地操作系统命令的方法
  4. redhat bash: yum: 未找到命令..._常用linux yum 命令和 vim命令,这几个要熟记
  5. matlab检测串口数据帧头,MATLAB 串口读取姿态数据及GUI实时动态显示设计
  6. ControlStyles(枚举)
  7. java数据库技术_JAVA数据库技术
  8. 网络序、主机序、点分十进制的IP地址转换
  9. 苹果发布 iOS 14 Beta 8 iphone 14 GM要来咯
  10. Linux系统软件安装
  11. 阿拉伯数字转中国人民币大写字符串
  12. 悦动圈跑步 随意提交步数 重大BUG漏洞 希望官方早些修复
  13. matalab三维画图
  14. linux shell中环境变量$PS1详解
  15. 研发人员一些比较重要的能力指标参考
  16. SDE:Stochastic Differential Equation 简述
  17. Js 获取当前时间上一个月 YYYY-mm
  18. 软考有什么用?最全软考详解
  19. python自学视频与excel_小白也能学习的 python pandas excel 处理[视频]
  20. html热点区域确定坐标,html图片热点连接区域上的坐标是如何定位的?

热门文章

  1. 罗斯福国家森林树木类型识别
  2. 如何用计算机表达无理数,科学网—刘瑞祥:计算机表示无理数的一些设想 - 孙冰的博文...
  3. 企业微信预览图片的接口使用wx.previewImage
  4. OPPOReno4SE和华为畅享20 哪款好
  5. oracle的set函数,setex(oracle trunc函数)
  6. 第四周项目三计算并联电阻
  7. 11行Python代码制作聊天机器人
  8. 每月一书(202111):《五百年来王阳明》
  9. shell脚本部署俄罗斯方块
  10. 游戏制作之路(25)Camera(摄像机)的清除标志Solid color