我可以将迭代器递增一个整数吗?

can I increment an iterator by an integer?

std::map<int, int> m;
// initialize m...
//
int n=3;
for (std::map<int, int>::iterator iter = m.begin()+n; iter != m.end(); ++iter)
// Is the above line correct?
{}

我可以按照代码中所示将迭代器递增一个整数吗?

只有当迭代器是随机访问迭代器时,您才能对它执行 "pointer arithmetic"。 std::setstd::multisetstd::mapstd::multimap 的迭代器不是随机访问迭代器。为映射迭代器有效地支持 "increment by n" 操作需要在红黑树结构中进行一些额外的簿记,这会增加所有用户的开销。这是一个很少需要的操作,因此标准库不支持它。

您可以使用 std::next(m.begin(), n) 的 "slow" 方式来完成。这只是将迭代器的副本递增 n 次,并将结果递增 returns。

您可以为此使用 std::advance()std::next()

std::map<int, int> m;
...
for (auto iter = next(m.begin(), 3); iter != m.end(); ++iter)
{
}

无论迭代器类型如何,std::advance()std::next() 都表现最佳。如果您将随机访问迭代器传递给他们,他们将使用 operator + ()。否则,他们会重复使用 operator ++ ().