c++primer学习笔记-----3.3标准库类型vector
来源:互联网 发布:宁夏干部网络培训学校 编辑:程序博客网 时间:2024/05/17 09:04
标准库类型vector 表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引(下标),索引用于访问对象。它又被称为容器,第二部分将对容器进行更为详细的介绍。要想使用vector,需要头文件<vector> 和using std::vector 声明。
c++ 语言即有类模板,也有函数模板,vector 即是一个类模板。模板本身不是类或函数,相反可以看作为了编译器生成类或函数编写的说明规范。编译器根据模板创建类或函数的过程称为实例化,实例化时需要给出所需的必要信息。
对于类模板来说,我们通过提供一些额外信息来指定模板到底实例化成什么样的类,需要提供什么样的信息是由类模板决定的。
提供信息的方式总是这样:即在模板名字后面跟一对尖括号,在括号内放上信息。对于vector,需要用尖括号内给出vector 对象内存放元素的变量类型。
引用不是对象,不存在包含引用的vector。
3.3.1 定义和初始化vector 对象
【下面列出定义vector 对象的各种方法:
vector<T> v1; // v1 是一个空vector,它潜在的元素是T 类型的,执行默认初始化vector<T> v2(v1); // v2 是v1 的一个拷贝副本,但注意v1 和v2 的元素类型必须一致vector<T> v2 = v1; // 等价于上条语句vector<T> v3(n, val); // v3 包含了n 个重复的元素,每个元素的值都是valvector<T> v4(n); // v4包含了n个重复地执行了默认初始化的T 类型对象,当然前提是T 类型支持默认初始化vector<T> v5{a,b,c,...}; // v5 包含了初始值个数的元素,每个元素被赋予了对应列表的初始值vector<T> v5 = {a,b,c,...}; // 等价于上一条语句
列表初始化是c++ 11新标准中才得到全面应用的,在VS2012 中的很多场合,还不支持列表初始化。】
【空vector 看起来没什么用,但由于程序在运行时可以很高效地往vector 对象中添加元素,所以建立一个空vector 再逐个向内添加元素成了最常见的方式。】
【使用花括号的列表初始化与使用圆括号的(元素数量,初始值)的批量初始化要注意区分。
事实上,当使用了花括号的形式,而括号内的值又不能用来列表初始化,编译器会尝试用这些值来进行批量初始化。】
3.3.2 向vector 对象中添加元素
【最常见的情况是,创建一个vector 对象是不清楚实际所需的元素个数;还有时候虽然清楚元素个数和值,但是值总量很大且各不相同,这些情况下执行上节所述的各种初始化方式就会显得过于繁琐。
通常我们会考虑先创建一个类型确定的空vector 对象,在运行时使用vector 类的成员函数push_back 向其中添加元素,push_back 函数接收vector 对象元素类型的参数,并负责把该参数当成vector 对象的尾元素“ 压到(push)”vector 对象的“尾端(back)”。
string word;vector<string> text;while(cin >> word)text.push_back(word);】
【c++ 标准要求vector 应在运行时高效快速地添加元素,因此既然vector 对象能高效地增长,在定义vector 对象的时候设定其长度就没什么必要了。
9.4 节将介绍vector 提供的其他方法,允许我们进一步提升动态添加元素的性能。】
【范围for 语句体内不应改变其所遍历序列的大小:
如果循环体内部包含有向vector 对象添加元素的语句,则不能使用范围for 循环,原因将在5.4.3 节介绍】
3.3.3 其他vector 操作
v.empty();v.size(); // 返回值是vector<T>::size_type,不同元素类型的vector 的size 函数返回值类型不同v.push_back(t);v[n]v1 = v2;v1 = {a, b, c,...};v1 == v2v1 != v2<, <=, >, >= // 比较规则与string 类型相同,但有个前提为元素类型必须为支持进行比较的类型】
- c++primer学习笔记(3.3)标准库vector类型
- c++primer学习笔记-----3.3标准库类型vector
- linux & C++Primer 学习笔记--标准库vector类型
- c++primer笔记--3.3标准库类型vector
- C++primer 3.3 标准库类型 vector
- c++ primer学习笔记3-标准库类型string&vector
- C++ primer阅读笔记之标准库vector类型学习
- C++ primer学习笔记 ——标准库类型vector
- C++ Primer学习笔记7 标准库类型(标准库vector类型、迭代器简介)
- c++primer学习笔记(3.2)标准库string类型
- c++primer学习笔记(3.5)标准库bitset类型
- 【C++Primer学习笔记】第3章 标准库类型
- c++primer学习笔记2 - 标准库类型
- C++Primer 学习笔记 第三章(标准库类型)
- C++Primer学习笔记3 标准库类型
- C++primer学习笔记-第三章标准库类型
- c++primer学习笔记-----3.2标准库类型string
- 【C++ Primer】【学习笔记】【第三章】标准库类型之:vector类型
- mysql字符集乱码问题
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
- 递归递推练习 D 汉诺塔系列1
- 进程的几种状态和调度方法
- Spring MVC(下)
- c++primer学习笔记-----3.3标准库类型vector
- IE8的调试工具使用详解
- Git 常用命令
- KMP算法
- 深入浅出MyBatis-快速入门
- Android 调用系统的拍照与摄像程序
- HDOJ 4496 D-City(并查集 逆序 + 删边)
- JAVA运行时数据区域
- GDOI2017模拟二式