gpt4 book ai didi

c++ - 带有反向迭代器的 std::vector 上的 std::lower_bound 产生错误的结果

转载 作者:太空狗 更新时间:2023-10-29 21:42:56 29 4
gpt4 key购买 nike

最近我遇到了对给定区间之外的元素进行计数的需求。

例如,如果我有一个排序 vector { 10, 20, 30 } 和另一个排序 vector { 15, 25 },它们的边界定义了区间。我想数“10”和“30”(范围内只有 20 个)。为此,我使用 std::vector 和 std::lower_bound,一次向前扫描 vector ,一次向后扫描。

代码如下:

    int t[] = { 15, 25 };
int c[] = { 10, 20, 30 };

std::vector<int> tt(t, t + 2);
std::vector<int> cc(c, c + 3);

auto lower = std::lower_bound(cc.begin(), cc.end(), tt.front(), [](int a, int b){ return a < b; });
auto upper = std::lower_bound(cc.rbegin(), cc.rend(), tt.back(), [](int a, int b){ return a > b; });

size_t beforeCount = lower - cc.begin();
size_t afterCount = upper - cc.rbegin();

我希望 'lower' 和 'upper' 都指向同一个元素:20。

我在这上面花了一些时间,有人发现这里有问题吗?我真的很想为此使用 STL。

谢谢,亚历克斯

最佳答案

我认为您对迭代器的区别和迭代器指向的值感到困惑。

你的程序完全按照你的想法去做,看看吧 here .

beforeCountafterCount 都等于 1。它们是迭代器,不是任何 vector 元素的值,它们只是指向 vector 中值的指针。

要打印相应的元素,只需执行以下操作:

std::cout << cc[beforeCount] << std::endl;
std::cout << cc[afterCount] << std::endl;

输出:

20

20

注意:

您可以在没有中间数组的情况下初始化 vector :

std::vector<int> tt { 15, 25 };
std::vector<int> cc { 10, 20, 30 } ;

关于c++ - 带有反向迭代器的 std::vector 上的 std::lower_bound 产生错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228712/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com