Ter*_*iao 1 c++ dictionary iterator stdmap std
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::set、std::multiset、std::map和的迭代器std::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 ++ ()。