是否有一个固定缓冲项和动态项目计数的标准数组?

时间:2014-10-30 12:47:51

标签: c++ arrays stl containers std

我正在寻找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];}
  };

3 个答案:

答案 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,在前面正确地调整它,并且根本不会增长它。