从零单排c++ primer(8)

(1)向一个vector、string或deque插入元素会使所有指向容器的迭代器、引用和指针失效。
(2)当用一个对象来初始化容器时,或将一个对象插入到容器中时,实际上放入到容器中的是对象值的一个拷贝,而不是对象本身。
(3)insert函数将元素插入到迭代器所指定的位置之前。
(4)将元素插入到vector、deque和string中的任何位置都是合法的。然后这样做可能很耗时。
(5)emplace函数的参数根据元素的类型而变化,参数必须与元素类型的构造函数相匹配。
(6)对于一个空容器调用front和back,就像使用一个越界的下标一样,是一种严重的程序设计错误。所以要进行容器判空。
(7)在容器中访问元素的成员函数返回的都是引用。
(8)删除deque中除首尾位置之外的任何元素都会使所有迭代器、引用和指针失效。指向vector或string中删除点之后的位置的迭代器、指针和引用都会失效。
(9)删除元素的成员函数并不检查其参数。在删除元素之前,程序员必须确保它们是存在的。
(10)如果在一个循环中插入/删除deque、string或vector中的元素,不要缓存end返回的迭代器。
(11)reserve并不改变容器中元素的数量,它仅影响vector预先分配多大的内存空间。
(12)vector的实现采用的策略是在每次需求分配新的内存空间时将当前的容量翻倍。
(13) 通常当我们从一个const char*创建string时,指针指向的数组必须以空字符结尾,拷贝操作遇到空字符时停止。否则构造函数未定义。
(14) 一个适配器接受一种已有的容器类型,使其行为看起来像一种不同的类型。
(15)stack默认基于deque实现,queue默认基于deque实现,priority默认基于vector实现。  
(16) 迭代器令算法不依赖于容器,但算法依赖于元素类型的操作。
(17)泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作。
(18)算法永远不会改变底层容器的大小。
(19) 对于只读取而不改变元素的算法,通常最好使用cbegin()和cend()。但是,如果你计划使用算法返回迭代器来改变元素的值,就需要使用begin()和end()。
(20) 由于equal利用迭代器完成操作,因此我们可以通过调用equal来比较两个不同类型的容器中的元素。而且元素类型也不必一样,只要能用==来比较两个元素类型即可。
(21)那些只接受一个单一迭代器来表示第二个序列的算法,都假定第二个序列至少与第一个序列的长度一样长。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值