本文介绍了奇怪的错误,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< int> :: begin()总是返回const迭代器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!