这有什么好的理由吗?
vector<CalcToken*>* myVec; //assume this contains CalcToken
for(vector<CalcToken *>::iterator it = myVec->begin() ; it != myVec->end() ; advance(it,1)) {
cout<< (*it)->toString()<< " ";
}
这不会给我带来任何东西,back?(advance(it,2))
for(vector<CalcToken *>::iterator it = myVec->begin() ; it != myVec->end() ; advance(it,2)) {
cout<< (*it)->toString()<< " ";
}
我想做一个循环,应该跳过一些元素.,下面的循环不适合我,无论是it++、it++还是it+=2。
发布于 2016-07-23 18:11:39
如果向量有奇数的元素,advance
调用将尝试将迭代器推进到向量的末尾。这是不明确的行为。
解决这个问题的一种方法是使用对标准advance
的以下修改(我限制前进方向以节省自己的工作)
template<typename Iterator>
void limited_advance(Iterator& it, Iterator end, unsigned distance,
std::random_access_iterator_tag)
{
if ((end - it) < distance)
it += distance;
else
it = end;
}
template<typename Iterator>
void limited_advance(Iterator& it, Iterator end, unsigned distance,
...)
{
while (it != end && distance > 0)
{
++it;
--distance;
}
}
template<typename Iterator>
void limited_advance(Iterator& it, Iterator end, unsigned distance)
{
limited_advance(it, end, distance,
typename std::iterator_traits<Iterator>::iterator_category());
}
然后将advance(it,2)
替换为limited_advance(it, myVec->end(), 2)
。
https://stackoverflow.com/questions/38544551
复制相似问题