9

イテレータを使用して独自のコンテナテンプレートを作成しました。const_iteratorを実装するにはどうすればよいですか?

template <class T>
class my_container {
 private:
  ...

 public:
  my_container() : ... { }
  ~my_container() { }

  class iterator : public std::iterator<std::bidirectional_iterator_tag, T> {
  public: ...
4

3 に答える 3

4

唯一の違いは、constイテレータを参照解除すると、コンテナ内のオブジェクトへの参照ではなく、const参照を取得することです。

于 2009-06-30T05:55:12.057 に答える
2

イテレータを実装する最も簡単な方法は、boost::iteratorです。あなたがあなた自身を転がしたいのなら、私は署名が次のようになるべきだと思います:

class const_iterator : public std::iterator<std::bidirectional_iterator_tag, const T> {

実装は同じです(関数のシグネチャでreference_typeなどを使用していると仮定します)

于 2009-06-30T06:01:43.917 に答える
0

Roger Pate、value_typesは「単純」です。iterator_traits :: const_iterator> :: referenceを見ると、constが表示されると思います。これは「constint&」になると思います。

于 2010-01-14T16:40:04.853 に答える