本文介绍了奇怪的错误,set< int> :: begin()总是返回const迭代器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么set.begin()总是返回一个const迭代器而不是一个标准的呢?

Why is set.begin() always returning a const iterator and not a standard one?

35 int test(){
36     std::set<int> myset;
37     myset.insert(2);
38     myset.insert(3);
39     int &res = *myset.begin();
40     return res;
41 }


test.cpp:39: error: invalid initialization of reference of type ‘int&’ from expression of type ‘const int’


推荐答案

它不会返回 const_iterator ,而是 std :: set< int> 的key_type是 const int

It's not returning a const_iterator, rather the key_type of std::set<int> is const int.

请记住, std :: set 中的键是常量。在将键插入集合后,您无法更改键。因此,当您取消引用迭代器时,它必然返回一个常量引用。所以你需要说:

Remember that keys in a std::set are constant. You can't change a key after it's inserted into the set. So when you dereference the iterator, it necessarily returns a constant reference. So you need to say:

const int &res = *myset.begin();

这篇关于奇怪的错误,set&lt; int&gt; :: begin()总是返回const迭代器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 08:38