同様に、単一リンクリストがあるとしますstd::forward_list
。述語に一致する単一のリスト要素を見つけ、それに対していくつかの操作を実行し、オプションで別の述語に基づいてそれを削除したいと思います。
これまでに、私は以下を組み立てました:
for (T::iterator it = l.begin(), prev_it = l.before_begin();
it != l.end();)
{
if (predicate)
{
// ...
if (another_predicate)
{
l.erase_after(prev_it);
break;
}
}
prev_it = it;
++it;
}
ただし、インクリメント部分を実行するのに最適な方法かどうかは特に疑問です。あるいは、私は検討してきました:
++prev_it;
++it;
プレーンCでは前者の方が明らかに優れていますが、C++ではもうそれほど明確ではないようです。より単純なイテレータを使用すると、前者の方が単純になるはずです。ただし、イテレータのコピーにメモリ割り当てが含まれる場合(たとえば、PImplを使用する場合)、実際には後者の方が適している場合があります。
どの方法が優れていると思いますか、またその理由は何ですか?std::forward_list
これを厳密に一般的な設計に限定することを避け、より複雑なタイプで機能するソリューションを検討したいことに注意してください。