list,rbegin以及base

虽说使用stl已经很熟练了,但还是经常要犯这样那样的一些小错误。看下我的这个错误吧。

我有一个list,一个map,list里包含了一些人的个人资料,姓名啦(假定姓名是唯一的),年龄啊。由于某种原因,姓名的值可能为空的。
现在有一个需求:要求提供一个姓名,能迅速找到这个人的资料。根据这些要求,我就很自然的使用了一个map,
map的key是姓名,value是这个姓名在list里的iterator值,因此当我新添加一个人时,很自然的将这个新人的资料添加到
list的最后,因此最开始的代码入下:
people_list.push_back(Item(_T("dikatour"), 23, _T("zhejiang province")));
people_map.insert(Map_t::value(_T("dikatour"), people_list.rbegin().base());

这里我的逻辑是:rbegin()是最后一个元素,而base是这个reverse_iterator对应的正序的那个iterator,应该也是指向最后那个元素
的iterator吧。运行结果是直接崩溃,因为rbegin()对应的正序的iterator是end(),是最后那个元素的后一个元素!也就是说reverse_iterator
与正序的iterator相比,正序的iterator的位置比reverse_iterator的位置多一。

明白这一点后,我修改了代码:
people_map.insert(Map_t::value(_T("dikatour"), people_list.end()--);

还是崩溃了,因为people_list.end()--表达式先计算people_list.end(),就当做参数的值交给了insert函数,而一直
到insert函数返回后才执行后面的--操作,实在粗心啊!正式的写法应该是:

people_map.insert(Map_t::value(_T("dikatour"), --people_list.end());

---------------------------------------------------------------------------------------------------------

笔记:
std::list是双链表,它的iterator是bidirectional iterator.它的迭代器有能力顺序的递增,递减,但不能像vector那样
随机地递增活递减,也就是说它支持operator++, operator--, 但不支持operator+和operator-




 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值