C++ 是否有具有固定缓冲区项和动态项计数的标准数组?
我正在寻找一个C++98而不是C++11中的标准容器 哪个将具有此规范: -固定缓冲区大小,如简单数组 -使用类计数访问器向量 以下是我想要的:C++ 是否有具有固定缓冲区项和动态项计数的标准数组?,c++,arrays,stl,containers,std,C++,Arrays,Stl,Containers,Std,我正在寻找一个C++98而不是C++11中的标准容器 哪个将具有此规范: -固定缓冲区大小,如简单数组 -使用类计数访问器向量 以下是我想要的: template <class TYPE, size_t ARRAY_SIZE> class Array { /*-------------------------------- MEMBERS ---------------------------------*/ private: TYPE _
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这样做也不是真正可行的。您可以自己编写,也可以在某个第三方库中找到 Boost.Container可能很适合。在push_backconst TYPE&i_TYPE{u array[\u count]=i_TYPE;\u count++}和操作符[]中,您应该检查是否正在跨越边界,然后忽略或抛出适当的异常,比如ArrayIndexOutOfBounds之类的异常
使用STD::向量,为什么要重新生成同一个轮子?
< P>这可能被一些人认为是与好C++相矛盾的,但是考虑到约束和假设的要求,包括在编译时需要知道大小,我会考虑使用一个简单的C样式数组。p> <>正如在C++中有一个地方被认为是邪恶的宏和其他结构一样,C数组也是有地方的。邪恶的不是工具,而是它的使用方式如果您不需要在编译时了解siae,那么我会倾向于使用向量,预先正确地调整它的大小,并且永远不增长它。为什么您需要固定大小,而不是简单地以给定的大小创建它并且永远不增长它?您需要知道编译时的大小吗?如果是,为什么?如果vector不可接受,为什么不?所有C++98提供的都是C风格的数组,它们是固定的缓冲区大小,并且具有sizeofarray/sizeofT形式的大小函数。对于固定大小的数组,C++11有一个合适的类,并且可能没有理由不能只复制头和一些小的修正,因此它是独立的。1它适用于嵌入式软件,所以我更喜欢在启动时初始化所有内存,这样我就可以确保有足够的内存用于所有场景。2这种容器允许我将其放入一个类中,作为消息发送给另一个进程,如果另一个进程具有相同消息的类定义,我可以将缓冲区强制转换到该类型的类中并处理该消息。@rastafaryd我编辑了我的答案,以提供到一个实现的链接。