おいふぉりーのぶろぐ

きっと趣味のブログに違いないです!!

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

back_inserter にちょっと悩む

C++ の STL の話になるのですが、 back_inserter を使ってコンテナへ要素を追加して(正確にはコピーを追加)、コンテナ内の追加された要素への参照を次のようなソースで受け取れないかな~と書いてみたのですが、コンパイルすら通りません。直感的に、イテレータはポインタと互換な演算ができるはずと思ったのですが…ちょっと間違いがあったようです。
list<int> container;
back_insert_iterator<list<int> > iter = back_inserter(container);

*(iter++) = 1;
int &v = *iter;        // 問題の部分
とりあえず、 STL のリファレンスは置いといて、実装の方を眺めてみたのですが、これではうまくいくはずがないですね。次のソースは SGI STL の実装です。back_insert_iterator ですが、演算子*, ++ はダミーで自分自身を返すだけなんですね。代入演算子で push_back する仕組みです。ちょっと、こんな実装でいいのか?~とか思ったのですが…MSVC8付属の back_inserter も同じ実装でしたし…
リファレンスを見ると確かに back_insert_iterator は OutputIterator の一種なので、参照を受け取ったりはできないみたいですね。以後気をつけます~
template <class _Container>
class back_insert_iterator {
protected:
  _Container* container;
public:
  typedef _Container          container_type;
  typedef output_iterator_tag iterator_category;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;

  explicit back_insert_iterator(_Container& __x) : container(&__x) {}
  back_insert_iterator<_Container>&
  operator=(const typename _Container::value_type& __value) {
    container->push_back(__value);
    return *this;
  }
  back_insert_iterator<_Container>& operator*() { return *this; }
  back_insert_iterator<_Container>& operator++() { return *this; }
  back_insert_iterator<_Container>& operator++(int) { return *this; }
};

template <class _Container>
inline back_insert_iterator<_Container> back_inserter(_Container& __x) {
  return back_insert_iterator<_Container>(__x);
}
  1. 2007/07/01(日) 12:21:10|
  2. ソフトウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<const_iterator の const を外したいと思ったこと | ホーム | 知能ロボコン 2007>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://tm86eublog.blog42.fc2.com/tb.php/201-17f36563
この記事にトラックバックする(FC2ブログユーザー)

来客数

プロフィール

Euphorie

Author:Euphorie
"おいふぉりー"って呼んでくださいな☆
ハードウェアとかソフトウェアとかの開発に興味があったり。。。
連絡先は上の画像。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。