C++ Primer Chapter 9-3

来源:互联网 发布:安卓备份软件 编辑:程序博客网 时间:2024/06/05 09:46
1:任何涉及到改变容器中元素个数的操作都会使得迭代器失效,所以在循环中如果有这些操作,那么迭代器一定要在每次循环之前重新获取。practice 9.3.3 的 9.26

2:前向链表由于结构特殊只存在一些特殊的操作函数,结尾带after的函数,只可以在指定元素的后面删除、插入,而不像其他的容器都是在指定元素之前插入。还可以返回一个在首迭代器之前迭代器,叫首前迭代器

3:正是由于 forward_list 的删除和插入函数特殊情况,我们对 forward_list 中某个元素的删除或插入必须要知道他的前一个元素的迭代器,前驱迭代器

4: 容器中insert函数,返回值是一个指向最后插入容器中的元素的迭代器,
比如除了forward_list的容器都是向前插入,那么返回值是这一系列插入值中排在容器中最前面的元素的迭代器。
forward_list 在容器中都是向后插入,那么返回值是这一系列插入值中排在容器中最后面元素的迭代器。

都是时间上最后插入的元素的迭代器

5: 向空的 forward_list 用 insert_after 函数 第一次插入元素时,要注意不能用首迭代器,因为它和尾迭代器相同插入尾后没有定义的操作,只能用首前迭代器,同时注意 erase_after 函数擦除不在 forward_list 内存中的元素也是未定义操作,所以不能擦除尾部元素之后的内存,更不能删除尾后迭代器所指位置后面的元素。超出容器的内存范围。

6:容器中的 erase 函数删除两个迭代器之间的元素时(
  1. lst.erase(iter1,iter2);

),只删除 iter1(包含) 和 iter2 (不包含)之间的元素,即为左闭合区间,但是对于earse_after 函数
  1. flst.erase_after(iter1,iter2);
iter1 和 iter2 都不包含。为双开区间  ,  
两个函数的返回值其实都是 iter2 

7:只要元素在内存中位置改变了,那么迭代器就会失效,否则不会失效。(迭代器按指针意思理解)

8:再循环中改变了容器,那么千万不要缓存end 返回值。因为一旦操作增删尾后迭代器就会失效

9:容器中的元素个数内存空间是两回事,vector  string  deque 容器一般会分配比元素多的内存空间

10:string 的构造函数有两个版本,一个时接收char 数组的参数,第二个是接收 string 类型的。
  1. string ( char * cp ,int len);// 从 数组 cp 的开头开始拷贝len个值构造一个 string 对象
  2. string (string s ,int n,int len)// 从 s 的下标 n 开始拷贝len个值构造一个 string 对象,如果没有le//n 则一直拷贝到结尾
详见 page 321

11:substr 可以获取一个 string 的子字符串,
  1. subsrt(int pos,int len)// 获取string 对象从pos开始的长度为 len 的子字符串,返回一个 string 对象


12: replace 函数
  1. replaceint index, int len, string s)//在string 对象中 index 下标开始删除 len 个字符,然后插入s 或者
  2. replace ( range, string s),range其实是两个参数,一对迭代器

13: 一般告知函数一个范围有两种方法:1)告诉起始位置终止位置,2)告诉起始位置跨度

14: String 其实是一个char 的容器,所以insert 函数不可以带一个string对象,就像vector中不能插入vector

0 0
原创粉丝点击