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

can I increment an iterator by an integer?

本文关键字:一个 整数 迭代器 我可以      更新时间:2023-10-16
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?
{}

我可以按代码中所示的整数递增迭代器吗?

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

你可以用std::next(m.begin(), n)"慢"的方式做到这一点。这只会将迭代器的副本递增n倍并返回结果。

您可以使用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 ++ ().

相关文章: