C++ STL map迭代器iterator解引用的结果

如题
之前发出过提问

https://ask.csdn.net/questions/8042482?spm=1001.2014.3001.5505

写代码过程中遇到迭代器解引用赋值给常引用,发现常引用和迭代器解引用后指向的地址不一致。
常引用item的地址和*citer的地址不一样,不符合逻辑。

在这里插入代码片
void  TestFunc2(const std::pair<int, QString>& item1)
{
}
std::map<int, QString> mymap{ {1,QString("a")} ,{2,QString("b")} ,{3,QString("c")} ,{4,QString("d")} };

std::map<int, QString>::const_iterator citer= mymap.cbegin();
const std::pair<int, QString>& item = *citer;
TestFunc2(item);

后续调试突然反应过来,是常引用item的类型有问题,在std::map<int, QString>这种情况下,迭代器解引用会指向他对应的值,值类型为value_type,此处value_type的类型为const std::pair<const int, QString>& ;而不是const std::pair<int, QString>& ;因为定义与之不对应,所以解引用赋值发生了重载,导致常引用的地址与迭代器解引用指向的地址不一致;

其次另外衍生出的问题:

在这里插入代码片
std::map<int, QString> mymap1{ {1,QString("a")} ,{2,QString("b")} ,{3,QString("c")} ,{4,QString("d")} };
std::map<int, QString> mymap2{ {1,QString("a")} ,{2,QString("b")} ,{3,QString("c")} ,{4,QString("d")} };

mymap1与mymap2虽然数据一致,但是迭代器不能混用,mymap1的迭代器不能与mymap2的作比较或者赋值等操作
迭代器的使用需要与对象对应!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值