Lower_bound 给出其他结果
Lower_bound gives other result
测试 lower_bound c++ 函数
在 Ideone 中 运行 这段代码后,我得到了奇怪的结果。
我究竟做错了什么?这里的 auto 用法正确吗?
代码:
vector<int> a(5);
a.clear();
rep(i,0,5){
a[i]=i+1;
cout<<a[i]<<' ';
}
cout<<endl;
auto pos = lower_bound(a.begin(),a.end(),3);
cout<< (pos-a.begin())<<'\n';
输出:
1 2 3 4 5
0
为什么??预期输出:
2
我做错了什么我不明白。看起来像基本的 C++ 代码
此行创建了一个包含五个元素的向量:
vector<int> a(5);
下一行删除所有五个元素,将大小设置为零:
a.clear();
因此循环写入超出向量的 end()
,触发未定义的行为。 这不会扩展向量。
实际上,您在空序列上调用 lower_bound
,因此 pos == a.begin()
。删除对 clear()
的调用以解决问题。
您的代码有未定义的行为。
您正在创建一个 std::vector
,其中有 5 个 int
,,然后您 clear()
向量 ,它设置了它的大小回到 0.
然后你 运行 一个循环访问超出向量大小范围的向量元素。此时,您的代码具有 未定义的行为 。什么事情都可能发生。您的代码可能会崩溃。您的代码可能会损坏内存。
然后你在 空 向量上调用 std::lower_bound()
,所以它 returns end
迭代器,它与 begin
迭代器,所以它们之间的距离为0,也就是你打印出来的。
您只需取消对 clear()
的调用,然后您的代码就会按预期工作。
测试 lower_bound c++ 函数 在 Ideone 中 运行 这段代码后,我得到了奇怪的结果。 我究竟做错了什么?这里的 auto 用法正确吗?
代码:
vector<int> a(5);
a.clear();
rep(i,0,5){
a[i]=i+1;
cout<<a[i]<<' ';
}
cout<<endl;
auto pos = lower_bound(a.begin(),a.end(),3);
cout<< (pos-a.begin())<<'\n';
输出:
1 2 3 4 5
0
为什么??预期输出:
2
我做错了什么我不明白。看起来像基本的 C++ 代码
此行创建了一个包含五个元素的向量:
vector<int> a(5);
下一行删除所有五个元素,将大小设置为零:
a.clear();
因此循环写入超出向量的 end()
,触发未定义的行为。 这不会扩展向量。
实际上,您在空序列上调用 lower_bound
,因此 pos == a.begin()
。删除对 clear()
的调用以解决问题。
您的代码有未定义的行为。
您正在创建一个 std::vector
,其中有 5 个 int
,,然后您 clear()
向量 ,它设置了它的大小回到 0.
然后你 运行 一个循环访问超出向量大小范围的向量元素。此时,您的代码具有 未定义的行为 。什么事情都可能发生。您的代码可能会崩溃。您的代码可能会损坏内存。
然后你在 空 向量上调用 std::lower_bound()
,所以它 returns end
迭代器,它与 begin
迭代器,所以它们之间的距离为0,也就是你打印出来的。
您只需取消对 clear()
的调用,然后您的代码就会按预期工作。