您的位置:首页 > 编程语言 > C语言/C++

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的最高优先级的元素,但不返回此元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: