upper_bound并发现给出不同的结果

时间:2019-05-06 19:20:26

标签: c++ vector stl

我是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。 我在做什么错了?

1 个答案:

答案 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)。