С C ++ 0x вы можете использовать std :: array <>, который похож на старый добрый массив, с дополнительным преимуществом в качестве контейнера STL, что позволяет использовать много алгоритмов std ::
В качестве альтернативы, вы можете попробовать boost :: array.
Обратите внимание, что есть также std::tr1::array<>
.
редактирование:
На самом деле, одним из случаев, в которые я не вошел, было увеличение вектора при чтении файлов конфигурации, а затем фиксированный размер - DanS
Тогда, почему не это (иллюстрация):
#include <vector>
int main () {
std::vector<int> foo;
/* ... crunch upon foo ... */
// make a copy vector->vector:
const std::vector<int> bar (foo);
// make a copy any->vector
const std::vector<int> frob (foo.begin(), foo.end());
}
В качестве альтернативы, если вам нужна семантика reset (), но вы хотите запретить resize () и др., Вы можете написать контейнерный адаптер:
template <typename T, typename Allocator = allocator<T> >
class resettable_array {
public:
// container ...
typedef typename std::vector<T,Allocator>::iterator iterator;
typedef typename std::vector<T,Allocator>::const_iterator const_iterator;
...
iterator begin() { return vector_.begin() }
const_iterator begin() const { return vector_.begin(); }
...
void push_back (T const &v) { vector_.push_back (v); }
...
// custom
void reset () { ... }
private:
std::vector<T,Allocator> vector_;
};
Смотри также: