我在C ++中关注Lower_bound()
的{{3}}教程。我做了一个简单的代码,在向量中找到一个小于或等于向量中的数字的数字+我想要的任何数字。我的代码就像这样
cout << *lower_bound(A.begin(), A.end(), A[x] + 3);
其中向量A[]
已排序。但是代码将它指向一个大于两个数字之和的数字。
例如,如果我的向量的值为0, 3, 5, 8, 12
,并且我希望它打印最小的数字小于或等于A[3] + 3 = 11
,那么它应该输出为8
,但它会给出输出12
。有什么理由吗?
这是我的代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> A = {0, 5, 3, 12, 8};
sort(A.begin(), A.end());
cout << "A[3] = " << A[3] << endl;
cout << *lower_bound(A.begin(), A.end(), A[3] + 3) << endl;
return 0;
}
答案 0 :(得分:3)
返回指向范围[first,last]中第一个元素的迭代器,该元素的值不比val小。
在你的情况下,它没有返回小于11的最后一个值。它返回的第一个值不小于11,在你的例子中是12。
答案 1 :(得分:0)
如果您希望最大数量不超过目标,可以使用std::greater<>
并反转迭代器(或按std::greater<>
排序)
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> A = {0, 5, 3, 12, 8};
std::sort(A.begin(), A.end());
std::cout << "A[3] = " << A[3] << std::endl;
std::cout << *std::lower_bound(A.rbegin(), A.rend(), A[3] + 3, std::greater<int>{}) << std::endl;
return 0;
}