容器和算法

本文深入探讨C++中的顺序容器,如list、vector和deque,以及map的erase方法细节。同时,介绍了容器适配器的概念,特别是如何使用适配器改变容器的行为。此外,文章还讲解了泛型算法,如排序算法std::sort的使用条件和限制,以及unique、count_if等算法。还讨论了插入迭代器、iostream迭代器和反向迭代器的使用,并解释了迭代器运算符优先级的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二部分 容器和算法
**********************************************************************************************************************************
第9章 顺序容器
list - 顺序容器
vector、deque - 随机访问顺序容器,迭代器支持算术运算




map的erase方法:
该方法中利用了后++的特点,这个时候执行mapTest.erase(it++);这条语句分为三个过程
1、先把it的值赋值给一个临时变量做为传递给erase的参数变量
2、因为参数处理优先于函数调用,所以接下来执行了it++操作,也就是it现在已经指向了下一个地址
3、再调用erase函数,释放掉第一步中保存的要删除的it的值的临时变量所指的位置
如果只是mapTest.erase(it); 当这条语句执行完后,it就是一个非法指针,如果再执行++就会出错




问题:
1】只有list和deque支持push_front,而vector不支持,但vector是否可以使用vec.insert(vec.begin(), 1)来实现此功能呢?
可以
适配器 - 使一事物的行为类似于另一事物行为的机制,包括容器适配器、迭代器适配器和函数适配器。
         容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。


**********************************************************************************************************************************
第11章 泛型算法


笔记:
1】11.2.3 对容器元素重新排序的算法 → 5.排序算法:
std::sort使用注意事项:
sort封装了快速排序算法,要求迭代器是随机迭代器,并且是可写的。
如果迭代器不是随机的,那么排序在理论上将变得非常低效;
如果迭代器是不可写,那么将无法进行排序,因为排序要求对迭代器指向的元素进行赋值操作。
如此std::sort算法要求迭代器是可写的随机迭代器。这一点要求使得我们不能在std::set、std::list等以结点形式存储的容器里使用std::sort。
参考:http://cpp.ezbty.org/content/science_doc/c%E6%A0%87%E5%87%86%E5%BA%93%EF%BC%9A%E4%BD%BF%E7%94%A8stdsort


2】11.2.3 对容器元素重新排序的算法 → 5.排序算法:unique、count_if算法的使用




问题:
1】11.2.3 对容器元素重新排序的算法 → 5.排序算法:标准库定义了四种不同的排序算法,除sort和stable_sort外,另外两种排序算法是?


11.2.3 插入迭代器 - back_inserter、front_inserter、inserter
back_inserter函数是一种插入器。插入器是一种迭代器适配器,带有一个容器参数,并生成一个迭代器,用于在指定容器中插入元素。




11.3.2 iostream迭代器 - sum = *item_iter++;运算符优先级该如何判定,是否可以写为:sum = *(item_iter++);?
可以,*与++优先级相同(2级),都是右结合性,因此先计算item_iter++,再将其返回值做解引用运算。
参考:
http://zhidao.baidu.com/question/41848360.html
http://clanguage.h.baike.com/article-74289.html




11.3.3 反向迭代器 - rbegin().base() == end()


迭代器适配器
http://blog.youkuaiyun.com/effective_coder/article/details/8733853
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值