我需要一個數組,其中大小在編譯時已知。我知道我可以使用std :: vector或boost :: array。但這並不教我如何在內部工作。除了使用初始值設定項之外,我也找不到如何將項目添加到boost :: array。我已經爲通用數組編寫了以下代碼。我的目的是熟悉的迭代器,模板特等等以下是代碼實現一個支持迭代器的通用固定大小數組
template<typename T>
struct iterator_traits
{
typedef T value_type;
typedef T& reference_type;
typedef T* iterator;
typedef const T* const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
};
template<typename T>
struct iterator_traits<T*>
{
typedef T* value_type;
typedef T*& reference_type;
typedef T** iterator;
typedef const T const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
};
template<typename T, size_t size = 10>
class Array
{
public:
typedef typename iterator_traits<T>::value_type value_type;
typedef typename iterator_traits<T>::reference_type reference_type;
typedef typename iterator_traits<T>::iterator iterator;
typedef typename iterator_traits<T>::const_iterator const_iterator;
typedef typename iterator_traits<T>::reverse_iterator reverse_iterator;
Array() : lastIndex(0) {
}
void add(value_type element) {
if(lastIndex >= size)
throw std::out_of_range("Array is full");
array_[lastIndex++] = element;
}
reference_type at(unsigned int index){
if(index < size)
return array_[index];
else
throw std::out_of_range("Invalid index");
}
size_t capacity(){
return size;
}
iterator begin(){
return array_;
}
iterator end(){
return array_ + size;
}
const_iterator begin() const{
return array_;
}
const_iterator end() const{
return array_ + size;
}
reverse_iterator rbegin() {
return reverse_iterator(end());
}
reverse_iterator rend() {
return reverse_iterator(begin());
}
private:
value_type array_[size];
unsigned int lastIndex;
};
上面的代碼工作得很好。以下是我的問題
1 - 如何創建我的陣列,如boost :: array呢?類似於
Array<int> ints = { 10, 12 };
2 - 代碼中是否有任何缺陷?
3 - 我不得不使用專門的特質指針類型。這是最佳做法嗎?
4 - 迭代器模式是否正確實現?
任何想法都會很棒!
std :: iterator_traits(#include)已經專門用於指針,你不需要提供你自己的指針。 –
2009-06-27 21:44:21
你是什麼意思,你不能添加任何東西來提高:數組? – GManNickG 2009-06-27 22:14:39