2017-04-13 96 views
-1

我想在数组中找到前两个相邻的邻居并将迭代器返回到第一个。在下面的代码中,写下“ForwardIterator next = ++ first;”并没有给出我想要的结果,但它看起来是正确的。另一方面,写“ForwardIterator next = first; ++ next;”工作正常。那么,我错过了什么?迭代器和增量运算符

template<class ForwardIterator> 

ForwardIterator MyAdjacent(ForwardIterator first, ForwardIterator last) 
{ 
ForwardIterator next = ++first; 
while (first != last) 
{ 
    if (*first == *next) break; 
    else 
     ++first; 
     ++next; 
} 
return first; 
} 
+2

您是否意识到'next = ++ first'会突变'first'?在这段代码中'* first == * next'应该总是成立。 –

+1

这不是你的代码的问题,但是'++ next'在你的'else'下缩进的事实实际上并不会使它落在你的'else'之下。 – Barry

+0

您的缩进非常混乱。 ++下;应该与if/else一致。另外,我建议保持一致性,例如,在'if'之后的'break'就像'++ first'在else之后的行中一样。 –

回答

2

ForwardIterator next = ++first;将修改first,所以next永远是等于first。相反,尝试:

ForwardIterator next = std::next(first); 

这会给你的递增迭代器,而无需修改first。您需要在文件顶部的#include <iterator>。请参阅http://en.cppreference.com/w/cpp/iterator/next