std::unordered_map 的递增迭代器
incrementing iterator of std::unordered_map
为什么第 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)
(returns 递增的副本并且不会修改 it
).
为什么第 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)
(returns 递增的副本并且不会修改 it
).