2017-04-13 14 views
-1

最初の2つの隣接するネイバを配列内で検索し、最初のイテレータにイテレータを返します。以下のコードでは、 "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

あなたのインデントは非常に混乱しています。 ++ next; if/elseと一直線に並ばなければなりません。また、より一貫性を持たせることをお勧めします。たとえば、 '最初の'がelseの後の行にあるのと同じ方法で 'if'の後の行に '中断'を入れます。 –

答えて

2

ForwardIterator next = ++first;firstを変更しますので、nextは常にfirstに等しくなります。代わりに、試してみてください。

ForwardIterator next = std::next(first); 

をこれはfirstを変更することなく、あなたにインクリメントイテレータを提供します。ファイルの先頭に#include <iterator>が必要です。 http://en.cppreference.com/w/cpp/iterator/next

関連する問題