我一直在經歷boost::range
庫,並注意到boost :: range_iterator和boost::iterator_range
。我對這些條款感到困惑。任何人都可以請解釋兩者之間有什麼區別,什麼時候使用什麼?此外,如果您可以指點我使用boost範圍庫來了解除文檔以外的更多關於它的示例,那將是非常好的。謝謝boost :: range_iterator和boost :: iterator_range混淆
9
A
回答
7
任何人都可以請解釋兩者之間有什麼區別,什麼時候使用什麼?
range_iterator用於獲取類型範圍迭代器的方式如下:
range_iterator<SomeRange>::type
它呈三角在東西std::iterator_traits。舉例來說,你可以從迭代器獲取的值類型:
std::iterator_traits<int*>::value_type
iterator_range的是範圍和迭代器之間的橋樑。例如 - 你有一對迭代器,並且你想把它們傳遞給只接受範圍的算法。在這種情況下,您可以使用iterator_range將迭代器包裝到範圍中。或者更好 - make_iterator_range - 這將有助於推斷類型(如性病:: 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());
}
而且,這將是很好,如果你可以點我來樣例子,其中升壓範圍庫是用於瞭解更多關於它除了該文件
快速總結 - 檢查this slides
3
通常,您不會直接使用boost::range_iterator
,因爲它是一個模板元函數,它接受給定的範圍(不考慮範圍的類型),並返回它的begin()/ end()方法的類型。
boost::iterator_range
用於從一對預先存在的迭代器中創建一個新的範圍。這通常在使用仍然基於迭代器的代碼並將其用於範圍轉換時更有可能使用。
相關問題
- 1. 如何創建const boost :: iterator_range
- 2. rbegin()的一個boost :: iterator_range
- 3. 混合Qt和Boost
- 4. Boost Spirit綜合屬性混淆
- 5. Boost正則表達式混淆
- 6. Boost :: asio阻止Tcp服務器混淆
- 7. 爲什麼clang會讓STL混淆Boost?
- 8. boost ::任何指針與值的混淆
- 9. boost asio跨平臺換行混淆
- 10. 來自模板迭代器的boost :: iterator_range
- 11. C++ boost :: iterator_range <iter> string_view錯誤
- 12. 將boost :: iterator_range指定爲單數範圍
- 13. 將std :: iterator對轉換爲boost :: iterator_range
- 14. 分割使用boost :: is_any_of混淆了分隔符「,,」和「」
- 15. boost :: transform_iterator和boost :: bind
- 16. 如何返回一個iterator_range
- 17. 封裝boost :: signal和boost :: bind
- 18. boost :: asio :: async_read和boost :: asio :: streambuf
- 19. 關於boost :: lock_guard和boost :: unique_lock
- 20. EOF boost :: async_read thread_pull和boost 1.54
- 21. 使用boost :: iterator_range;我的數據在哪裏超出範圍?
- 22. boost boost :: asio
- 23. boost :: mutex和boost :: timed_mutex之間的區別
- 24. 組合boost :: exception和boost :: variant的問題
- 25. 的boost :: MPI和boost ::系列化錯誤
- 26. boost :: polygon和boost/geometry/geometry/polygon的區別?
- 27. 關於Boost :: Python和Boost :: Threads的問題
- 28. boost異步套接字和boost ::線程
- 29. 'boost shared_ptr'和'boost lock'together =搞砸了
- 30. 使用boost :: future延續和boost :: when_all