みぃちゃんの頭の中はおもちゃ箱

略してみちゃばこ。泣いたり笑ったり

だまされてる?

2014年09月05日 22時36分11秒 | IT・デジタル
C++標準ライブラリ (STL) のback_inserterは便利で よく つかいます。これをつかうと、コンテナ オブジェクトの末尾に要素を追加する反復子をつくれるので、簡単に要素をとりこむことが できます。

そんな便利なback_inserterの なかみは こんな感じに なっています。
template <class Container>
inline back_insert_iterator< Ctn> back_inserter( Ctn &c)
{
	return back_insert_iterator< Ctn>( c);
}

実際に機能するのはback_insert_iteratorクラスのオブジェクトです。back_insert_iteratorクラスは こんな感じに なっています。

template< class Ctn>
class back_insert_iterator
: public iterator< output_iterator_tag, void, void, void, void>
{
public:
typedef Ctn container_type;
back_insert_iterator (Ctn &c) : ctn_(&c) {}
back_insert_iterator< Ctn> &
operator =( const Ctn::const_reference val)
{ ctn_->push_back( val);
return *this;
}
back_insert_iterator< Ctn> &operator* () { return *this; }
back_insert_iterator< Ctn> &operator++ () { return *this; }
back_insert_iterator< Ctn> operator++ (int) { return *this; }
protected:
Ctn *ctn_;
};

++演算子で なにも処理をしないのは当然です。でも、*演算子でback_insert_iteratorそのものが かえされるって、なんだか だまされたような気分に なるのは わたしだけ? いや、たしかに これで いいんだけど。

※ この記事の本文からは漢字の訓を排除しています。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。