[英]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.