少し初歩的な質問ですが、次のような用途に適した STL コンテナを探しています。
1) 通常の前方反復をサポート
2) リストを逆方向にたどりながら、リストの途中からの削除をサポートします。
3) 後ろに歩いているときに何かが削除された場合は、停止してリストの最後まで前に進む必要があります。
私はレギュラーを使用しstd::list
ましたが、リストのポイントから前に歩くのは少し難しいですが、実行可能であることがわかりました. forward と reverse_iterator の組み合わせを使用し、使用を回避することができましadvance
た (コストがかかるためです!)
これが私のコードです。
#include <list>
using namespace std ;
int main()
{
list< int > os ;
os.push_back( 1 ) ;
os.push_back( 2 ) ;
os.push_back( 3 ) ;
os.push_back( 4 ) ;
os.push_back( 5 ) ;
// 1 2 3 4 5
// should print:
// 5: NOTHING
// 4: 5
// 3: 4,5
// 2: 3,4,5
// 1: 2,3,4,5
for( list<int>::reverse_iterator riter = os.rbegin() ; riter != os.rend() ; ++riter )
{
//printf( "All the ones in FRONT of %d are:\n", riter->a ) ;
printf( "%d: ", *riter ) ;
// You can't do it with a for loop.
//for( list<O>::reverse_iterator iter = riter ; iter != os.rbegin() ; --iter )
list<int>::reverse_iterator iter = riter ;
if( iter != os.rbegin() ) do
{
--iter ; // move the iterator back.
printf( " %d", *iter ) ;
} while ( iter != os.rbegin() ) ;
//else printf( " NOTHING AFTER ME" ) ;
puts("");
}
}
私の質問は次のとおりです。
- コンテナの選択を誤ったのでしょうか?
deque
代わりに使うべきでしたか? - 内部ループの
for
代わりに使用する方法はありましたか?do/while