来自 C++ 多重集的意外输出 lower_bound
unexpected output from C++ multiset lower_bound
想知道为什么下面的代码 returns 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;
}
mymultiset.lower_bound(3)
returns 容器中 3
可以到达的最低位置,也就是容器的末尾。所以 itlow
等于 mymultiset.end()
,并且它是不可解引用的。 std::cout << *itlow
有未定义的行为。
你试图得到一个迭代器,它的下界是3,而你的最大值是-3。所以你有一个结束迭代器,它的值是未定义的。
你应该使用 multiset::begin()
作为你的迭代器,或者像 itlow = mymultiset.lower_bound (-4);
这样不太温和的东西。
你好澄清我的理解
我有一个包含 1 和 5 的多重集。
mset.insert(1);
mset.insert(5);
auto it = s.lower_bound(6);
cout<<*it<<endl;
现在,根据上面的答案,我将得到 2,因为这是值 6 可以放入容器的位置。我说得对吗?
接下来,如果我搜索值 4,我将得到 5。
这里我认为迭代器没有到达mset.end()。
我说得对吗?
谢谢
想知道为什么下面的代码 returns 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;
}
mymultiset.lower_bound(3)
returns 容器中 3
可以到达的最低位置,也就是容器的末尾。所以 itlow
等于 mymultiset.end()
,并且它是不可解引用的。 std::cout << *itlow
有未定义的行为。
你试图得到一个迭代器,它的下界是3,而你的最大值是-3。所以你有一个结束迭代器,它的值是未定义的。
你应该使用 multiset::begin()
作为你的迭代器,或者像 itlow = mymultiset.lower_bound (-4);
这样不太温和的东西。
你好澄清我的理解 我有一个包含 1 和 5 的多重集。
mset.insert(1);
mset.insert(5);
auto it = s.lower_bound(6);
cout<<*it<<endl;
现在,根据上面的答案,我将得到 2,因为这是值 6 可以放入容器的位置。我说得对吗?
接下来,如果我搜索值 4,我将得到 5。 这里我认为迭代器没有到达mset.end()。 我说得对吗?
谢谢