奇怪的错误,set::begin() 总是返回 const 迭代器
为什么 set.begin() 总是返回一个 const 迭代器而不是标准迭代器?
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’
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’
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它不返回 const_iterator,而是 std::set的 key_type 是 const int。
请记住,
std::set
中的键是常量。密钥插入密钥组后就无法更改。因此,当您取消引用迭代器时,它必然返回一个常量引用。所以你需要说:It's not returning a
const_iterator
, rather the key_type ofstd::set<int>
isconst int
.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: