C++学习笔记【第二部分第九章:顺序容器】
2017-09-05 15:51
363 查看
顺序容器
1. C++程序应该使用标准库容器,而不是更原始的数据结构如内置数组
2. 通常,使用vector是最好的选择,除非有很好的理由选择其他容器
3. 顺序容器类型
● vector,可变大小数组,快速随机访问,尾部插入删除快
● deque,双端队列,快速随机访问,头尾插入删除快
● list,双向链表,双向顺序访问,任何位置插入删除快
● forward_list,单向链表,单向顺序访问,任何位置插入删除快
● string,与vector类似,专门存储字符,快速随机访问,尾部插入删除快
4. 选择容器的基本原则,p293
5. 容器迭代器支持的所有操作:P56
● *iter
● iter->mem
● ++iter
● –iter
● iter1 == iter2
● iter1 != iter2
6. forward_list不支持–iter
7. 迭代器支持的运算:这些运算只用于string、vector、deque、array的迭代器。
8. 迭代器begin和end必须指向相同的容器,end不能指向begin之前的位置
9. 迭代器范围是左闭合区间
10. 当不需要写访问时,应该使用cbegin 和cend。
11. 使用一个容器来初始化另一个容器的时候,两容器的类型与元素类型必须完全匹配。使用迭代器参数来初始化容器时则无需匹配
12. 只有顺序容器的构造函数接受大小参数,关联容器不接受
13. 使用array类型,必须同时指定元素类型和大小
14. 内置数组不支持拷贝或赋值。P102
15. array也是标准库的,与数组的区别:可以拷贝或者赋值
16. array类型不支持assign,也不允许用花括号包围的值列表进行赋值。
17. 给array类型赋值,赋值号左右两边的运算对象必须具有相同的类型
18. swap的速度比拷贝快
19. assign操作不适用于array和关联容器
20. array的大小固定,所以不能动态添加删除元素
21. forward_list不支持push_back & emplace_back
22. vector & string 不支持push_front & emplace_front
23. 向一个vector、string、deque插入元素会使所有指向容器的迭代器、指针、引用失效
24. 容器元素是拷贝
25. 将元素插入到vector、string、deque是合法的,但是这样做很耗时
26. insert返回指向新添加的元素的迭代器
27. emplace函数在容器中直接构造元素,传递给emplace函数的参数必须与元素类型的构造函数匹配(push,insert都是拷贝,创建临时对象,压入容器)
28. 对于一个空容器使用front和back,就像使用一个越界的下标一样
29. 如果希望确保下标合法,可以使用at成员函数,如果下标越界,会抛出out_of_range的异常
30. 每次改变容器的操作之后都必须重新定位迭代器
31. 如果在一个循环中插入、删除deque、string或者vector中的元素,不要缓存end返回的迭代器,因为每次插入删除操作都会使得它失效
32. 每个vector都有自己的内存分配策略,但必须遵守的原则是:只有在迫不得已的情况下才重新分配内存
33. 修改string的操作。P323
34. C风格字符串的函数:strlen,strcmp,strcat,strcpy。传入此类函数的指针必须指向以空字符作为结束的数组
容器适配器
35. 除了顺序容器外,标准库还定义了三个顺序容器适配器:stack, queue,priority_queue。
36. P330,一个错误。表9.19中,q.pop(),表示删除queue的首元素或priority_queue的最高优先级的元素,但不返回此元素。
1. C++程序应该使用标准库容器,而不是更原始的数据结构如内置数组
2. 通常,使用vector是最好的选择,除非有很好的理由选择其他容器
3. 顺序容器类型
● vector,可变大小数组,快速随机访问,尾部插入删除快
● deque,双端队列,快速随机访问,头尾插入删除快
● list,双向链表,双向顺序访问,任何位置插入删除快
● forward_list,单向链表,单向顺序访问,任何位置插入删除快
● string,与vector类似,专门存储字符,快速随机访问,尾部插入删除快
4. 选择容器的基本原则,p293
5. 容器迭代器支持的所有操作:P56
● *iter
● iter->mem
● ++iter
● –iter
● iter1 == iter2
● iter1 != iter2
6. forward_list不支持–iter
7. 迭代器支持的运算:这些运算只用于string、vector、deque、array的迭代器。
8. 迭代器begin和end必须指向相同的容器,end不能指向begin之前的位置
9. 迭代器范围是左闭合区间
10. 当不需要写访问时,应该使用cbegin 和cend。
11. 使用一个容器来初始化另一个容器的时候,两容器的类型与元素类型必须完全匹配。使用迭代器参数来初始化容器时则无需匹配
12. 只有顺序容器的构造函数接受大小参数,关联容器不接受
13. 使用array类型,必须同时指定元素类型和大小
14. 内置数组不支持拷贝或赋值。P102
15. array也是标准库的,与数组的区别:可以拷贝或者赋值
16. array类型不支持assign,也不允许用花括号包围的值列表进行赋值。
17. 给array类型赋值,赋值号左右两边的运算对象必须具有相同的类型
18. swap的速度比拷贝快
19. assign操作不适用于array和关联容器
20. array的大小固定,所以不能动态添加删除元素
21. forward_list不支持push_back & emplace_back
22. vector & string 不支持push_front & emplace_front
23. 向一个vector、string、deque插入元素会使所有指向容器的迭代器、指针、引用失效
24. 容器元素是拷贝
25. 将元素插入到vector、string、deque是合法的,但是这样做很耗时
26. insert返回指向新添加的元素的迭代器
27. emplace函数在容器中直接构造元素,传递给emplace函数的参数必须与元素类型的构造函数匹配(push,insert都是拷贝,创建临时对象,压入容器)
28. 对于一个空容器使用front和back,就像使用一个越界的下标一样
29. 如果希望确保下标合法,可以使用at成员函数,如果下标越界,会抛出out_of_range的异常
30. 每次改变容器的操作之后都必须重新定位迭代器
31. 如果在一个循环中插入、删除deque、string或者vector中的元素,不要缓存end返回的迭代器,因为每次插入删除操作都会使得它失效
32. 每个vector都有自己的内存分配策略,但必须遵守的原则是:只有在迫不得已的情况下才重新分配内存
33. 修改string的操作。P323
34. C风格字符串的函数:strlen,strcmp,strcat,strcpy。传入此类函数的指针必须指向以空字符作为结束的数组
容器适配器
35. 除了顺序容器外,标准库还定义了三个顺序容器适配器:stack, queue,priority_queue。
36. P330,一个错误。表9.19中,q.pop(),表示删除queue的首元素或priority_queue的最高优先级的元素,但不返回此元素。
相关文章推荐
- C++学习笔记【第二部分第十一章:关联容器】
- C++学习笔记19——顺序容器的介绍
- C++ 学习笔记 2.1 : 容器和算法(顺序容器、关联容器、泛型算法)
- 笔记:C++学习之旅---顺序容器
- 顺序容器 - 3【C++ Primer 学习笔记 - 第九章】
- 【C++ Primer】【学习笔记】【第九章】顺序容器之:顺序容器的操作
- C++基础的不能再基础的学习笔记——顺序容器(基本操作)
- C++ Primer复习和学习笔记 第九章 顺序容器
- C++学习笔记【第二部分第十二章:动态内存】
- C++学习笔记九-顺序容器(二)
- c++ Primer 学习笔记 第九章----顺序容器
- C++学习笔记20——顺序容器的操作
- C++学习笔记之容器:顺序容器
- C++基础的不能再基础的学习笔记——顺序容器(其他操作)
- (2011.09.25)《C++ Primer》第二部分学习笔记汇总——容器与算法
- 【C++ Primer】【学习笔记】【第九章】顺序容器之:迭代器和迭代器范围
- C++学习笔记【第二部分第十章:泛型算法】
- 第二部分——第九章/顺序容器
- C++学习笔记【第二部分第八章:IO类】
- <C++Primer>第四版 阅读笔记 第二部分 “容器和算法”