为什么第 7 行和第 8 行不好?为什么对某些迭代器进行 in-/decrement 是不好的?
#include <unordered_map>
int main()
{
std::unordered_multimap<int,int> myumm({{1,3},{3,2},{5,5},{0,9}});
auto first = myumm.begin();
auto second = first+1; // bad
auto third = --myumm.end(); // bad too
auto fourth = myumm.end();
}
最佳答案
std::unordered_multimap
提供前向迭代器。这些是您可以分配、取消引用、比较和递增的迭代器。
为了能够递减迭代器 (--it
),您至少需要一个双向迭代器(例如 std::multimap< 提供的)/
)。
为了能够将(任意数字)添加到迭代器 (it + 1
),您需要一个随机访问迭代器(例如 提供的std::vector
).要将较弱的迭代器提升不止一个位置,请使用 std::advance(it, 42)
(用于将 it
提升到位)或 std::next(it, 42)
(返回递增的拷贝并且不修改 it
)。
关于c++ - std::unordered_map 的递增迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28278789/