我正在寻找C ++ 98中的标准容器(不是在C ++ 11中) 哪个会有这个规格: - 固定缓冲区大小(像一个简单的数组) - 使用计数访问器(如矢量)
以下是我要找的东西:
template <class TYPE, size_t ARRAY_SIZE>
class Array
{
/*-------------------------------- MEMBERS ---------------------------------*/
private:
TYPE _array[ARRAY_SIZE];
size_t _count;
/*--------------------- CONSTRUCTORS/DESTRUCTORS ---------------------------*/
public:
Array():_count(0){}
/*------------------------------- METHODS ----------------------------------*/
public:
inline const TYPE * data() const {return _array;}
inline void clear() {_count= 0; }
inline void push_back(const TYPE& i_type) {_array[_count] = i_type; _count++;}
inline size_t count() const {return _count;}
inline size_t max_size() const {return ARRAY_SIZE;}
inline bool empty() const {return (_count== 0);}
const TYPE& operator[](size_t i_index){return _array[i_index];}
};
答案 0 :(得分:0)
不,没有。对于vector
来说,操纵分配器也不是真的可行。您可以自己编写,也可以在某个第三方库中找到。
Boost.Container static_vector可能是个不错的选择。
答案 1 :(得分:0)
在push_back(const TYPE& i_type) {_array[_count] = i_type; _count++;}
和operator []
中,您应检查是否越过边界,然后忽略或抛出类似ArrayIndexOutOfBounds类型的相应异常。
使用std::vector
,为什么重新发明同一个轮子?
答案 2 :(得分:0)
有些人可能会认为这与优秀的C ++是对立的,但考虑到约束和假定的要求(包括需要在编译时知道大小),我会考虑使用一个简单的C风格数组。
就像在C ++中有一个宏和其他构造被认为是邪恶的地方一样,C阵列也有一席之地。它不是邪恶的工具,而是它的使用方式。
如果你不需要在编译时知道siae,那么我会倾向于使用vector
,在前面正确地调整它,并且根本不会增长它。