5

一般的な双方向反復子を取る関数を作成する前に、int のベクトルに対してどのように機能するかをテストしたいと思いました。

vector<int> a(10,1);
iterator<bidirectional_iterator_tag, int> i = a.begin();
for (; i != a.end(); ++i) cout << *i;

このコードはコンパイルされません。g++ は、begin() の戻り値の型を変換できずiterator<bidirectional_iterator_tag, int>、演算子++および*が定義されていないと文句を言います。明らかに私は何か間違ったことをしています。助けていただければ幸いです。

4

1 に答える 1

6

std::iterator新しい反復子の実装を容易にする基本クラスですが、すべての反復子がこれを使用して実装されるわけではなく、すべての反復子がこれに変換されるわけではありません。イテレータ クラスの唯一の要件は、特定の操作セットを提供することです。これによって暗示されるクラス階層はなく、ほとんどのコンテナーは独自のイテレーター クラスを出荷します。したがって、この場合、vector<int>::iteratorイテレータの型として使用する必要があります。または、最近の C++11 標準を使用している場合はauto、コンパイラに型を推測させるために使用できます。

于 2012-07-18T19:43:58.483 に答える