【发布时间】:2021-06-20 01:24:36
【问题描述】:
第一个是:
map <int,int> m;
//... some elements inserted
auto i= m.begin();
cout<<(*i).first<<(*i).second;
这里我们需要使用解引用操作符 *
第二:
map <int,int> m;
//... some elements inserted
for(auto i: m)
cout<<i.first<<i.second;
为什么这次我不需要使用 * 运算符?
还有一个疑问:
for(auto &i: m)
'&' 在这里有什么不同?
【问题讨论】:
-
auto i= m.begin();std::map<int, int>::iterator i = m.begin ();|for(auto i: m)for (std::map<int, int>::value_type i : m)|for(auto &i: m)for (std::map<int, int>::value_type& i : m) -
什么是 value_type ?
-
auto只是自动为您推断类型。在第一个示例中,您有一个指向键值对的迭代器,在第二个示例中没有迭代器。只是一个键值对。另外,您应该使用i->first而不是(*i).first -
@super 谢谢。这真的很有帮助!
标签: c++ for-loop iterator maps auto