Roast+でのイテレータは、STL等のものとは若干仕様が異なります。 STL等でのイテレータでは、「ポインタと同様に動作する」と言うコンセプトの元作られていますが、 このために、例えばSTLのalgorithm等では、begin()とend()の両方のイテレータを渡さねばならず、 場合によっては2コンテナ分のイテレータ(つまり合計4つのイテレータ)を渡さなければいけないアルゴリズム関数もあり「なんだかなぁ・・・」と思った人も多いと思います。 これは自前で作成した関数等の場合においても同様で、begin(),end()の2つのイテレータを渡す必要があります。 [[BR]]しかしこれは正直面倒なので、恐らく多くの人はイテレータではなく、'''コンテナそのものへの参照やポインタ'''を渡しているのではないかと思います。…一体なんのためのイテレータなんか、めんどくさいだけじゃないか、そう思った方も多いでしょう。 恐らくこのような形にしたのは、STL策定時に「これまでの配列やポインタからの移行がしやすいように(型名を書き換えるだけで移行する事が出来、修正規模が少なく済むように)」との考えの元、これにより皆がC古来からの固定長配列・malloc()/free()から移行してくれるようにと願い、このような仕様にしたものと思われますが、正直今となっては、そんな時代遅れな話よりも使い勝手を重視したい事かと思います。(笑 [[BR]] STLのイテレータでは、イテレータの引渡しやalgorithmの使用が無くとも、単純にループするだけでも結構面倒なものです。 {{{ code cpp ::std::vector hoge_ary; hoge_ary.push_back(1); hoge_ary.push_back(2); hoge_ary.push_back(3); for(::std::vector::iterator it=hoge_ary.begin(); it != hoge_ary.end(); it++) { ::std::cout << *it << ::std::endl; } }}}} ・・・for文の所の一行の長さが'''74文字'''もあります。 [[BR]]これに加えインデントが入りますし、vector配列の変数名次第ではそろそろ改行が欲しい頃かも知れません(私はもう上の74文字の段階で入れたいくらいですが・・・)。 Roast+では例えば以下のように書きます。 {{{ code cpp ::roast::primitive_vector hoge_ary; hoge_ary.push_back(1); hoge_ary.push_back(2); hoge_ary.push_back(3); for(::roast::primitive_vector::iterator it=hoge_ary.get_iterator(); it.is_valid(); it.next()) { ::std::cout << *it << ::std::endl; } }}}}