Wondeirng为什么下面的代码返回1
?我从不将1
插入multiset
容器。
#include <iostream>
#include <set>
int main ()
{
std::multiset<int> mymultiset;
std::multiset<int>::iterator itlow;
mymultiset.insert(-3);
itlow = mymultiset.lower_bound (3);
std::cout << *itlow << endl; // output 1
return 0;
}
答案 0 :(得分:4)
mymultiset.lower_bound(3)
返回3
可以去的容器中的最低位置,以及容器末尾的位置。因此itlow
等于mymultiset.end()
,并且它不可解除引用。 std::cout << *itlow
有未定义的行为。
答案 1 :(得分:1)
你正试图得到一个Iterator,他的下界是3,你的最大值是-3。所以你有一个结束迭代器,它的值是未定义的。
您应该使用multiset::begin()
作为迭代器,或者使用itlow = mymultiset.lower_bound (-4);
之类的不太温和的东西。
答案 2 :(得分:0)
您好,请澄清一下我的理解 我有一个包含1和5的多重集。
mset.insert(1);
mset.insert(5);
auto it = s.lower_bound(6);
cout<<*it<<endl;
现在,从以上答案中,我将得到2,因为这是值6可以放入容器内的位置。我说的对吗?
接下来,如果我搜索值4,则得到5。 在这里,我认为迭代器尚未到达mset.end()。 我说的对吗?
谢谢