【发布时间】:2018-08-02 08:06:51
【问题描述】:
const std::vector<int> v = {5, 7, 3, 6, 5, 4, 7, 8, 5, 6};
auto low = std::lower_bound( v.begin(), v.end(), 7);
auto high = std::upper_bound( v.begin(), v.end(), 7);
std::cout << low - v.begin() << " " << high - v.begin();
所以当我尝试在我的 Mac 上使用 clang++ 编译器编译这段代码时,它会返回输出为
10 10
这意味着v.end() 表示高和低,尽管低应该是 = 1 和高 =7(数字 8)。我做错了什么?
【问题讨论】:
-
请注意,
std::upper_bound和std::lower_bound都要求范围“至少部分排序”。 -
这些函数只适用于排序数据。
-
@Someprogrammerdude 只是出于兴趣,这个问题到底有什么问题?对我来说,这似乎是“最小的”、“完整的”和“可验证的”。
-
@AliAlamiri 我们基本上应该能够复制粘贴代码并复制输出,而无需任何努力“修复”事物。这包括诸如头文件和
main函数之类的东西。输出也应该作为文本复制粘贴,而不仅仅是与文本的其余部分混合。我们还应该看到 expected 输出,格式与实际输出相同。这在我提供的链接中都有详细说明。