c++ primer plus 第六版第十六章学习笔记

  1. string
  2. 智能指针类:用于指向new、new[]分配的动态内存,当智能指针对象过期时其析构函数将使用配套的delete;差别:为防止智能指针间的赋值导致的重复删除对象所采取的的措施:auto_ptr、unique_ptr将转让所有权,unique_ptr更安全,shared_ptr采用引用计数当计数为零时才调用析构函数;析构函数:auto_ptr、shared_ptr均只有与new配套的delete版本,unique_ptr有delete、delete[]两种版本;选择:当使用new、且需要赋值操作时使用shared_ptr,当使用new[]时只能使用unique_ptr,但特别注意赋值操作,一般不用auto_ptr。
  3. 迭代器类型:
    1. 输入迭代器:将容器的信息输入到程序,只能读不能写,只能使用++遍历容器(前缀后缀均可),可对当前的迭代器解除引用,单通行的,不能对迭代器先前的值解除引用,也不能保证第二次遍历的顺序
    2. 输出迭代器:除了迭代器用于对容器的只写不读之外,其他特性与输入迭代器相同;
    3. 正向迭代器:除了具有输入输出迭代器的所有功能外,还实现了可对前面的迭代器值解除引用(如果保存了它),不同于输入迭代器,可以实现正向的多次通行;
    4. 双向迭代器:具有正向迭代器的全部特征,同时增加了--(前缀后缀)运算符,能够双向遍历容器;
    5. 随机访问迭代器:具有双向迭代器的全部特征,增加了可访问容器中任何一个元素的功能,即随机访问功能以及对元素进行排序的关系运算符(p689表16.3)
    6. 反向迭代器:对迭代器的递增操作将导致它被递减,既若有p是指向某容器的超尾迭代器,++p操作将使其指向容器的最后一个元素;
    7. 插入迭代器:将一般迭代器的赋值操作转换为插入操作,将数据插入到迭代器指定的位置,而不会覆盖原始数据;back_insert_iterator:将元素插入到容器尾部,只能用于允许在尾部快速插入(时间固定的算法)的容器,back_insert_iterator<vector<int>>back_iter(dice),其中dice是容器名;front_insert_iterator将元素插入到容器的前端,创建方法同前;inset_iterator:将元素插入到迭代器指定的容器位置,insert_iterator<vector<int>>insert_iter(dice,dice.begin())表示insert_iter迭代器用于将数据插入到容器dice的前端。
  4. 可反转容器:可以使用rbegin()、rend()类方法,两者均返回一个反向迭代器,前者为一个指向超尾的反向迭代器,后者则指向第一个元素,运用这两种方法,可对容器进行反向操作;
  5. 关联容器(set、multiset、map、multimap):使用某种树实现,类似结点但比结点的查找速度更快,关联容器都是进过排序的;set:值和键类型相同,且键唯一,多个相同的键只会存储一个,值就是键;multiset:与set相似,但是允许多个值的键相同,即可以存储多个相同的值;map:值与键的类型不同,每个键只对应一个值,容器中的值成对,一把用pair对其进行赋值等操作,且可使用first、second分别访问其值与键数据,可以使用数组表示法得到与键关联的值(wordmap[the],其中wordmap为map容器,the为其中的一个键,则该表示方法将得到键the对应的值的数据);multimap:与map类似,但是允许多个值对应一个键,成员函数count()以键作为参数,并返回键对应值出现的次数;
  6. 函数适配器:用于不同类型函数符之间的转换(例如一元函数和二元函数之间的转换);方法:使用类将接受两个参数的函数转换为接受一个参数的函数(p708toobig函数与类)对于自适应函数符,STL中使用binder1、binder2类自动完成这一过程(p712)

7、STL copy算法:

1)不能使用copy算法将一个范围的值复制到一个空容器中,可以采用构造函数用另一个容器中的值初始化该容器即:vector<int>v1;copy(list.begin(),list1.end(),v1.begin)将报错(其中list是一个有值的链表),可以用vector<int>v1(list1.begin(),list1.end())代替上述语句

2)copy算法可以用于不同容器间的复制,但会覆盖原始数据

3)可以将插入迭代器作为copy最后一个参数,表示将值插入该位置而不是覆盖;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值