【发布时间】:2014-10-30 12:47:51
【问题描述】:
我正在寻找 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];}
};
【问题讨论】:
-
为什么需要它固定大小,而不是简单地以给定大小创建它并且从不增长它?您需要在编译时知道大小吗?如果有,为什么?
-
如果
vector不可接受(为什么不呢?),所有 C++98 提供的都是 C 样式数组,它们是固定缓冲区大小,并且具有sizeof(array)/sizeof(T)形式的大小函数。 C++11 有一个适用于固定大小数组的类(可能没有理由不能只复制标头和一些小的修复,因此它是独立的)。 -
我需要这种容器有两个原因。 1)它用于嵌入式软件,所以我更喜欢在启动时初始化所有内存,所以我会确保所有场景都有足够的内存。 2)这种容器允许我把它放在一个类中,我可以将它作为消息发送给另一个进程,如果另一个进程具有相同的消息类定义,我可以将缓冲区转换为该类型的类并处理消息。
-
@rastafaryd 我编辑了我的答案以提供一个实现的链接。
标签: c++ arrays stl containers std