C++標準ライブラリ (STL) のback_inserterは便利で よく つかいます。これをつかうと、コンテナ オブジェクトの末尾に要素を追加する反復子をつくれるので、簡単に要素をとりこむことが できます。
そんな便利なback_inserterの なかみは こんな感じに なっています。
実際に機能するのはback_insert_iteratorクラスのオブジェクトです。back_insert_iteratorクラスは こんな感じに なっています。
++演算子で なにも処理をしないのは当然です。でも、*演算子でback_insert_iteratorそのものが かえされるって、なんだか だまされたような気分に なるのは わたしだけ? いや、たしかに これで いいんだけど。
※ この記事の本文からは漢字の訓を排除しています。
そんな便利な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そのものが かえされるって、なんだか だまされたような気分に なるのは わたしだけ? いや、たしかに これで いいんだけど。
※ この記事の本文からは漢字の訓を排除しています。