【Boost】boost::range(區間)介紹

來源:互聯網
上載者:User

1. 概念
區間的概念類似於STL中的容器概念。一個區間提供了可以訪問半開放區間[first,one_past_last)中元素的迭代器,還提供了區間中的元素數量的資訊。
1.1 目的
引入區間概念的目的在於:有很多類似於容器的類型,以及用於這些類型的簡化演算法。
1.2 用於的類型
類似於標準的容器
std::pair<iterator,iterator>
內建數組
2. 樣本
構造方法

void test_range_construct_string(){typedef std::string::iteratoriterator;typedef std::string::const_iteratorconst_iterator;typedef boost::iterator_range<iterator>irange;typedef boost::iterator_range<const_iterator>cirange;std::string       str  = "hello world";const std::string cstr = "const world";// 1. 基本構建方法boost::iterator_range<std::string::iterator> ir(str);boost::iterator_range<std::string::const_iterator> cir(str);// 2. 利用make_iterator_range(幾種重載函數)irange r    = boost::make_iterator_range(str);r           = boost::make_iterator_range(str.begin(), str.end());cirange r2  = boost::make_iterator_range(cstr);r2          = boost::make_iterator_range(cstr.begin(), cstr.end());r2          = boost::make_iterator_range(str);assert(r == str);assert(r.size() == 11);irange r3= boost::make_iterator_range(str, 1, -1);assert(boost::as_literal("ello worl") == r3);irange r4= boost::make_iterator_range(r3, -1, 1);// 這個也可以理解成複製構造assert(str == r4);std::cout << r4 << std::endl;irange r5 = boost::make_iterator_range(str.begin(), str.begin() + 5);assert(r5 == boost::as_literal("hello"));}

類型變化

void test_range_type(){using namespace boost;// 數組const int SIZE = 9;typedef int array_t[SIZE];const array_t ca = {1, 2, 3, 4, 5, 6, 7, 8, 10};assert((is_same<range_iterator<array_t>::type,       int*          >::value));assert((is_same<range_value<array_t>::type,         int           >::value));assert((is_same<range_difference<array_t>::type,     std::ptrdiff_t>::value));assert((is_same<range_size<array_t>::type,           std::size_t   >::value));assert((is_same<range_const_iterator<array_t>::type, const int*    >::value));assert(begin(ca) == ca);assert(end(ca) == ca + size(ca));assert(empty(ca) == false);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.