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 byn
”操作需要在红黑树结构中进行一些额外的簿记,这将增加所有用户的开销。这是一个很少需要的操作,因此标准库不支持它
您可以使用std::next(m.begin(),n)
以“慢”的方式完成。这只是将迭代器的副本增加n次并返回结果。只有在迭代器是随机访问迭代器时,才可以对其执行“指针算术”。std::set
、std::multiset
、std::map
和std::multimap
的迭代器不是随机访问迭代器。为地图迭代器有效地支持“increment byn
”操作需要在红黑树结构中进行一些额外的簿记,这将增加所有用户的开销。这是一个很少需要的操作,因此标准库不支持它
您可以使用
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