gpt4 book ai didi

c++ - map::iterator 是否产生左值?

转载 作者:太空狗 更新时间:2023-10-29 20:01:00 25 4
gpt4 key购买 nike

换句话说,当imap<K,V>::iterator ,执行以下操作以提供预期的语义(即修改 map ):

*i = make_pair(k, v);
i->first = k;
i->second = v;

?

更新:前两行无效,因为返回值是operator*是(可转换为?)一个 pair<const K, V> .第三行呢?

假设对这三个问题的回答是,这意味着:

  • 要么 map<K,V>元素存储为 pair<K,V>某处,
  • 或者有一些聪明的代理类 map<K,V>::iterator::operator*返回。在这种情况下,operator-> 是怎样的?实现 ?

最佳答案

我试图通过标准来追踪这一点:

  • 对于 map<Key,T> value_typepair<const Key,T>根据 23.3.1/2

  • map 类支持双向迭代器,根据 23.3.1/1

  • 双向迭代器满足前向迭代器的要求,根据 24.1.4/1

  • 对于前向迭代器 avalue_type T , 表达式 *a返回 T&(不是像其他一些迭代器那样“可转换为 T”的类型)(24.1.3 中的表 74)

因此,要求是返回对的引用,而不是其他代理类型。

关于c++ - map::iterator 是否产生左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3762008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com