Boost.Range

術語和風格

使用一致的術語對於 區間 和基於區間的算法是很重要的,就像對於迭代器和基於迭代器的算法一樣。採用一組約定俗成的名字,我們可以避免誤解並寫出的泛型函數原型將是自說明的

由於區間的特點在於其底層的迭代器類型,我們從每一種迭代器類型得到一種區間類型。因此我們可以有以下幾種類型的區間:

注意,我們使用的是 新 式迭代器 的分類類別。

一個迭代器(或一個區間)有一個遍 歷屬性和一個或多個值訪問類 別。所以事實上我們多數時候討論的是一個混合物,如:

為了方便起見,我們總是先指定遍歷屬 性,像上面那樣。因為只有一個遍歷屬 性而可能有多個值訪問屬 性,所以這是合理的。

不過,只指定一個類別也是合理的,如果不關心另一個類別的話。例如,iterator_range 可以從一個前向區間構造。這意味著我們不關心這個區間的值 訪問屬性。同樣,一個可讀區間具有最小可能的遍 歷屬性(單遍)。

再看另一個例子,我們如何指定 std::sort() 的接口。通常,算法在指定接口時很麻煩,因為必須 同時精確地定義遍歷值訪問屬性。基於迭代器的版本如下:

 template< class RandomAccessTraversalReadableWritableIterator >
void sort( RandomAccessTraversalReadableWritableIterator first,
RandomAccessTraversalReadableWritableIterator last );
而對於區間來說,接口變為:
 template< class RandomAccessReadableWritableRange >
void sort( RandomAccessReadableWritableRange& r );


© Copyright Thorsten Ottosen 2008.

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)