pol*_*pts 11 c++ boost boost-range
我一直在浏览boost::range
图书馆并注意到boost :: range_iterator和boost::iterator_range
.我在这里对这些术语感到困惑.请问有谁可以解释两者之间有什么区别以及什么时候使用什么?此外,如果您能指出示例示例,除了文档之外,还可以使用增强范围库来了解更多相关信息.谢谢
Evg*_*yuk 10
请问有谁可以解释两者之间有什么区别,何时使用什么?
range_iterator用于以下列方式获取范围迭代器的类型:
range_iterator< SomeRange >::type
Run Code Online (Sandbox Code Playgroud)
它与std :: iterator_traits相似.例如,您可以从迭代器获取值类型:
std::iterator_traits<int*>::value_type
Run Code Online (Sandbox Code Playgroud)
iterator_range是范围和迭代器之间的桥梁.例如 - 您有一对迭代器,并且您希望将它们传递给只接受范围的算法.在这种情况下,您可以使用iterator_range将迭代器包装到范围内.或者更好 - make_iterator_range - 它将有助于推断类型(如std :: make_pair):
make_iterator_range(iterator1,iterator2)
Run Code Online (Sandbox Code Playgroud)
返回范围.
考虑以下示例:
#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());
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您能指出示例示例,其中使用增强范围库来了解除文档之外的更多信息,那将会很不错
如需快速摘要 - 请查看此幻灯片