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() 的调用,然后您的代码就会按预期工作。