簡體   English   中英

C ++ 11反向迭代器和lower_bound

[英]c++11 reverse iterator and lower_bound

我有以下示例程序:

#include <iostream>
#include <string>
#include <map>

int main()
{
  std::map<int, int> a;
  a[8] = 1;
  a[5] = 1;
  a[1] = 1;
  a[2] = 1;

  std::cout << a.begin()->first << std::endl;

  std::cout << a.rbegin()->first << std::endl;
  std::cout << (++a.rbegin())->first << std::endl;
  std::cout << (--a.rbegin())->first << std::endl;

  std::cout << (a.lower_bound(6))->first << std::endl;
}

當我執行它時,得到以下輸出:

1
8
5
5
8

我有兩個問題。 第一個是為什么++a.rbegin()--a.rbegin()沿相同方向迭代? a.rbegin()返回的迭代器不是雙向迭代器嗎?

第二個問題是為什么a.lower_bound(6)->first返回8而不是5? 基於https://en.cppreference.com/w/cpp/container/map/lower_bound ,它應將迭代器返回到第一個元素“不少於鍵”。 因此,我本來以為自8> 6后將返回5。

--a.rbegin()是UB。

lower_bound(val)返回一個迭代器,該迭代器指向范圍不小於val的第一個元素。 5不小於“ 6 ”,因此您可以正確地將迭代器設置為8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM