我正在學習一些課程,我們將介紹幾個軟件模式,其中一個是迭代器模式,我們被要求用C++實現它。我們的教授在幾周前給了我們一些示例代碼,我想比我更好地理解它。首先,我將張貼代碼:關於C++中數組模板的問題
template <class T_,std::size_t SIZE_>
class carray {
public:
typedef T_ value_type;
typedef std::size_t size_type;
typedef T_ & reference;
typedef T_ const & const_reference;
typedef T_ * pointer;
typedef T_ const * const_pointer;
typedef T_ * iterator;
typedef T_ const * const_iterator;
typedef std::ptrdiff_t difference_type;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// data store
value_type data[SIZE_];
size_type size() const { return SIZE_; }
reference operator [] (size_type idx) { return data[idx]; }
const_reference operator [] (size_type idx) const { return data[idx]; }
reverse_iterator rbegin() { return reverse_iterator(end()); }
reverse_iterator rend() { return reverse_iterator(begin()); }
const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); }
const_reverse_iterator crend() const { return const_reverse_iterator(begin()); }
iterator begin() { return data; }
iterator end() { return data + SIZE_; }
const_iterator begin() const { return data; }
const_iterator end() const { return data + SIZE_; }
const_iterator cbegin() const { return data; }
const_iterator cend() const { return data + SIZE_; }
};
在這個模板我們的教授定義了一堆類型定義的,和他們幾個人既具有非恆定的和恆定的版本。首先,我想知道每個公共成員的目的是什麼,其次,在定義數據結構模板的上下文中,我想知道常量版本的目的是什麼。
我還注意到一些成員函數被定義爲'const',我不知道它的目的是什麼。
謝謝。在這個例子中,我想知道爲什麼需要一個常量迭代器?爲什麼我們有兩個開始函數返回一個const和非const迭代器? – mcraen
@CanadianCoder我們永遠不知道用戶的意圖。因此我們爲他們提供兩種選擇。例如,如果用戶想要使用'const'' carray'對象,那麼他們需要'const'迭代器,如果他們想迭代它。他們不能使用非''contst'版本來做到這一點。 – 0x499602D2