C++ 我可以用整数递增迭代器吗? std::map m; //初始化m。。。 // int n=3; for(std::map::iterator iter=m.begin()+n;iter!=m.end();+iter) //上面这行对吗? {}

C++ 我可以用整数递增迭代器吗? std::map m; //初始化m。。。 // int n=3; for(std::map::iterator iter=m.begin()+n;iter!=m.end();+iter) //上面这行对吗? {},c++,dictionary,iterator,std,stdmap,C++,Dictionary,Iterator,Std,Stdmap,我可以将迭代器按代码中所示的整数递增吗?只有当迭代器是随机访问迭代器时,才可以对其执行“指针算术”。std::set、std::multiset、std::map和std::multimap的迭代器不是随机访问迭代器。为地图迭代器有效地支持“increment byn”操作需要在红黑树结构中进行一些额外的簿记,这将增加所有用户的开销。这是一个很少需要的操作,因此标准库不支持它 您可以使用std::next(m.begin(),n)以“慢”的方式完成。这只是将迭代器的副本增加n次并返回结果。只有在

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

只有当迭代器是随机访问迭代器时,才可以对其执行“指针算术”。
std::set
std::multiset
std::map
std::multimap
的迭代器不是随机访问迭代器。为地图迭代器有效地支持“increment by
n
”操作需要在红黑树结构中进行一些额外的簿记,这将增加所有用户的开销。这是一个很少需要的操作,因此标准库不支持它

您可以使用
std::next(m.begin(),n)
以“慢”的方式完成。这只是将迭代器的副本增加n次并返回结果。

只有在迭代器是随机访问迭代器时,才可以对其执行“指针算术”。
std::set
std::multiset
std::map
std::multimap
的迭代器不是随机访问迭代器。为地图迭代器有效地支持“increment by
n
”操作需要在红黑树结构中进行一些额外的簿记,这将增加所有用户的开销。这是一个很少需要的操作,因此标准库不支持它


您可以使用
std::next(m.begin(),n)
以“慢”的方式完成。这只是将迭代器的副本增加n次并返回结果。

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

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::map m;
...
for(自动iter=next(m.begin(),3);iter!=m.end();++iter)
{
}

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

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

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::map m;
...
for(自动iter=next(m.begin(),3);iter!=m.end();++iter)
{
}

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

,而使用映射迭代器则无法做到这一点。使用std::nexty你不能用映射迭代器来实现这一点。使用std::next