私はboost::range
ライブラリを通過し、boost :: range_iteratorとboost::iterator_range
に気付きました。私はここでこれらの用語と混同しています。誰も何が2つの違いと何を使用するか説明してください?また、ブースト・レンジ・ライブラリを使用してドキュメンテーションとは別のサンプル・サンプルを紹介することができれば、いいかもしれません。ありがとうboost :: range_iteratorとboost :: iterator_rangeの混乱
9
A
答えて
7
2人と何時何の違いがあるのか説明してください。
range_iteratorは、次のように範囲イテレータのGETタイプのために使用されます。
range_iterator<SomeRange>::type
それはsimillar std::iterator_traitsに何かに。たとえば、あなたはイテレータから値型を取得することがあります。
std::iterator_traits<int*>::value_type
iterator_rangeは範囲とイテレータの間のブリッジです。たとえば、イテレータのペアがあり、範囲を受け入れるアルゴリズムに渡したいとします。その場合、iterator_rangeを使用してイテレータを範囲にラップすることができます。または、より良い - make_iterator_range - それは種類を推測するのに役立ちます(STDのように:: make_pairはありません):
make_iterator_range(iterator1,iterator2)
戻り及びます。
以下の例を考えてみますあなたはブースト範囲ライブラリは別にそれについての詳細を知るために使用された例をサンプリングするために私を指すことができる場合にも、それはいいだろう
#include <boost/range/iterator_range.hpp>
#include <boost/range/algorithm.hpp>
#include <boost/range/iterator.hpp>
#include <typeinfo>
#include <iostream>
#include <ostream>
using namespace boost;
using namespace std;
struct print
{
template<typename T>
void operator()(const T &t) const
{
cout << t << " ";
}
};
int main()
{
typedef int Array[20];
cout << typeid(range_iterator<Array>::type).name() << endl;
Array arr={11,22,33,44,55,66,77,88};
boost::for_each(make_iterator_range(arr,arr+5) ,print());
}
をチェックをドキュメント簡単な概要については
3
通常、boost::range_iterator
を直接使用しません。これは、指定した範囲(範囲の種類に関係なく)を取り、begin()/ end()メソッドの型を返すテンプレートメタ関数です。
boost::iterator_range
は、既存のイテレータのペアから新しい範囲を作成するために使用されます。これは、イテレータベースのコードを使用し、それを使用して範囲に変換するコードを使用するときに、通常は使用する可能性が高くなります。
関連する問題