我是STL的新手,并在vector上使用了upper_bound()
和
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> sam ={1,2,5,3,7,8,4,6};
int f=upper_bound(sam.begin(), sam.end(), 6)- sam.begin();
vector<int>::iterator it;
it =find (sam.begin(), sam.end(), 6);
int d=it - sam.begin() ;
cout<<d<<" "<<f<<endl;
return 0;
}
函数来查找6的位置。代码在下面
function waitForNetworkIdle(page, timeout, maxInflightRequests = 0) {
page.on('request', onRequestStarted);
page.on('requestfinished', onRequestFinished);
page.on('requestfailed', onRequestFinished);
let inflight = 0;
let fulfill;
let promise = new Promise(x => fulfill = x);
let timeoutId = setTimeout(onTimeoutDone, timeout);
return promise;
function onTimeoutDone() {
page.removeListener('request', onRequestStarted);
page.removeListener('requestfinished', onRequestFinished);
page.removeListener('requestfailed', onRequestFinished);
fulfill();
}
function onRequestStarted() {
++inflight;
if (inflight > maxInflightRequests)
clearTimeout(timeoutId);
}
function onRequestFinished() {
if (inflight === 0)
return;
--inflight;
if (inflight === maxInflightRequests)
timeoutId = setTimeout(onTimeoutDone, timeout);
}
}
// Example
await Promise.all([
page.goto('https://google.com'),
waitForNetworkIdle(page, 500, 0), // equivalent to 'networkidle0'
]);
运行代码时,输出为7 4,而我期望为7 7。 我在做什么错了?
答案 0 :(得分:1)
cppreference.com for std::upper_bound()
很好地说明了这一点(强调我的意思):
返回一个迭代器,该迭代器指向范围[first,last)中比值更大更大的第一个元素;如果找不到此类元素,则返回last。
范围[first,last)必须相对于 表达式
!(value < element)
或!comp(value, element)
,即全部 表达式为true
的元素必须在所有元素之前 其表达式为false
。品种齐全的产品满足了这一要求 条件。
在您的情况下,您有一个7(大于4,在索引4处)出现在之前一个4(等于或小于6),因此不满足先决条件。
std::upper_bound()
及其伴随的想法是在排序的数组中快速进行二进制搜索。与std::find()
中的线性搜索相反,它只需要O(log(n))时间复杂度,而不是O(n)。