boost::next, prior

トップページ > 小道具 >

abstract

必要なヘッダ
<boost/utility.hpp>
出来ること
一個後ろ/一個前を指すイテレータを取得
リファレンス
en

sample

サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]

#include <list>
#include <boost/utility.hpp>
using namespace std;

int main()
{
	list<int> lst( 2 );
	*lst.begin() = 10;
	*boost::next( lst.begin() ) = 20;

	return 0;
}

リストの先頭は 10、先頭の次の要素は 20 になります。

etc

iteratorを渡すと、「その次の要素」を返してくれる関数なわけです。 boost::prior ならば逆に「その前の要素」を返します。 これがあると、例えば

list<int>::iterator it = lst.begin();
for_each( ++it, lst.end(), f );

などと書いていた作業が一行で書けるようになってちょっと嬉しい感じです。 next の代わりに (++lst.begin()) と書けば良いではないか?と思われるかもしれませんが、begin() の返すイテレータが例えば int* などの組込型であった場合、 残念ながらその記述はコンパイルエラーになってしまいます。そして実際、 特に vector<T> は幾つかの実装でイテレータとして T* を返してきます。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0