《C++ Primer》读书笔记第三章-2-标准库类型vector
2017-09-07 11:42
148 查看
笔记会持续更新,有错误的地方欢迎指正,谢谢!
vector表示对象的集合—>容器,容器里面装的都是同一个类型的对象。 要想使用vector,必须包含适当的头文件:
C++语言有类模板(class template)。类模板本身不是类,可以看成一份类的说明,在我的理解中情况是这样的:
以
string比int特殊一点:(看看就好,不深究)
总结:上述只有v5和v7是列表初始化,所以,想要列表初始化,必须使用花括号,且花括号里的 值类型 必须与 定义的类型 一致。
在开始时创建空的对象,在运行时再添加元素,这个做法与C和Java等其他语言都不太一样,但这样很爽呀,这是一个容量动态增长的容器。
很不幸,通过下标访问不存在的元素的行为是很常见的,会导致缓冲区溢出,产生很严重的后果,以致出现安全问题。
缓冲区溢出:向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。(恐怖.avi)
解决方法:使用 范围for循环(但是千万不能在 范围for循环 中向vector对象添加元素,这是使用vector的第一个限制),或迭代器。
vector表示对象的集合—>容器,容器里面装的都是同一个类型的对象。 要想使用vector,必须包含适当的头文件:
#include <vector>
using std::vector;
C++语言有类模板(class template)。类模板本身不是类,可以看成一份类的说明,在我的理解中情况是这样的:
以
vector<T>为例:
vector<int> vec1;//vec1保存int对象
vector<vector<int>> vec2;//vec2保存
vector<int>对象
定义和初始化vector对象
下面列出了所有的初始化方法,挑顺手的用就行:默认初始化
vector<int> v1;//默认初始化,空vector
值初始化
值初始化:通常使用圆括号或直接等号,但如果使用花括号但提供的值又不能用来列表初始化时,编译器也会尝试用值初始化。vector<int> v2(v1);等价于
vector<int> v2 = v1;
初始化指定数量的元素
vector<string> v3(5, "c");//有5个 字符串”c”
vector<int> v4(5);//5个0
列表初始化vector对象
vector<int> v5{1, 2, 3};
是列表初始化还是值初始化?
例子:vector<int> v3(10, -1);//正确,10个-1,但不是列表初始化。
vector<int> v4(10);//正确,10个0,默认初始化。
vector<int> v5{10, -1};//正确,列表初始化,有两个元素:10,-1。
string比int特殊一点:(看看就好,不深究)
vector<string> v6("hi");//错误
vector<string> v7{"hi"};//正确,列表初始化
vector<string> v8(10);//正确,默认初始化,10个空string对象。
vector<string> v9{10};//正确,默认初始化,10个空string对象。
vector<string> v10(10,"hi");//正确,10个”hi”元素,但不是列表初始化。
vector<string> v11{10,"hi"};//正确,10个”hi”元素,但不是列表初始化。
总结:上述只有v5和v7是列表初始化,所以,想要列表初始化,必须使用花括号,且花括号里的 值类型 必须与 定义的类型 一致。
向vector对象中添加元素
尾插,就是在后面插(好像有点不对劲2333):push_back(值)在开始时创建空的对象,在运行时再添加元素,这个做法与C和Java等其他语言都不太一样,但这样很爽呀,这是一个容量动态增长的容器。
其他vector操作
v.empty()//返回true。
v.size()//返回vector::size_type。
v//n为下标,下标只能访问元素,不能创造添加元素,添加元素只能用Push_back(值)。
很不幸,通过下标访问不存在的元素的行为是很常见的,会导致缓冲区溢出,产生很严重的后果,以致出现安全问题。
缓冲区溢出:向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。(恐怖.avi)
解决方法:使用 范围for循环(但是千万不能在 范围for循环 中向vector对象添加元素,这是使用vector的第一个限制),或迭代器。
v1=v2;//拷贝替换,前提是同类型元素。
==,!=,<,<=,>,>=//以字典顺序进行比较。
相关文章推荐
- C++ primer 读书笔记系列——(2)标准库vector类型
- 《C++ Primer》读书笔记-第三章 03 标准库类型vector
- 读书笔记:C++ Primer系列(6)—— 标准库类型之vector
- 《c++ primer》——2 标准库vector类型和迭代器iterator
- C++ primer 读书笔记--第三章 标准库类型
- 第一部分 基本语言 第三章 标准库类型(3.3标准库vector类型)
- C++ Primer 读书笔记 Chapter 3 标准库类型
- C++ Primer_4th学习笔记(7)- 标准库 vector 类型
- C++ Primer 第三章 标准库vector类型
- 第三章 标准库string、vector、bitset类型 —— 第二节 vector类及其迭代器
- C++ primer 读书笔记系列——(1)标准库string类型
- 【C++ Primer每日刷】四 标准库类型vector
- 《C++ Primer》读书笔记 第三章 vector、iterator
- 《c++ primer》学习笔记 第三章 标准库类型(string, vector,bitset)
- 【C++ Primer】标准库vector类型
- 【C++ Primer】【学习笔记】【第三章】标准库类型之:vector类型
- C++ primer学习笔记 ——标准库类型vector
- 第三章 标准库类型(part 2) 标准库 vector 类型
- c++ primer学习笔记3-标准库类型string&vector
- 第一部分 基本语言 第三章 标准库类型(3.3标准库vector类型)