0

一時的なリストを作成してリストを変更せずに、STLリストの最後から2番目の要素へのイテレータを取得するにはどうすればよいですか?ただ言うことは可能--(--mylist.end())ですか?またはend、プレフィックスのデクリメントにより、リストのイテレータが変更されますか?

4

3 に答える 3

3

--mylist.end()一般に、すべてのコンテナでコンパイルできるとは限らないことに注意してください。

たとえば、リリース モードでstd::vectororを使用する場合、はおそらく生のポインターであり、関数からの値によって返されるポインターをデクリメントすることはできません。std::arraymylist.end()

C++11 でのこの問題の一般的な解決策はstd::prev(std::prev(mylist.end()))、もちろん、リストが十分に長いことを確認した後です。これには必要があります#include <iterator>

于 2012-07-12T10:24:45.670 に答える
3

std::advanceと reverse_iteratorを使用できます。

SomeContainerType::reverse_iterator it = myList.rbegin();
std::advance(it, 1); // next to last element

問題のイテレータ型が をサポートしていない場合でも、これは機能しますoperator+

于 2012-07-12T10:44:48.767 に答える
2

で問題ない場合はreverse_iterator、次のようにします。some_list.rbegin() + 1;

于 2012-07-12T10:17:42.130 に答える