动态大小的不可调整大小的数组

时间:2015-03-05 12:50:22

标签: c++ arrays boost vector stl

是否存在类似“动态大小不可调整大小的数组”的C ++类型?这种类型可以被认为是两件事之一:

  • vector<T>但没有resizepush_back
  • array<T,N>但其中N是动态的而非静态的。

我不想要只有在数组中的元素类型是不可复制类型时才有效的解决方案。我想要一个通用的解决方案。

1 个答案:

答案 0 :(得分:23)

是的,那里(差不多)是。 std::unique_ptr<T[]>。主模板具有针对此案例的部分特化,它提供了适当的接口(运算符[],没有运算符*等。)

或者,您可以将std::vector包装在您自己的类中并限制其界面。您甚至可以通过使用非公共继承从std::vector派生类并仅发布其接口的相关部分来实现此目的:

template <class T, class A = std::allocator<T>>
struct FixedVector : private std::vector<T, A>
{
  using FixedVector::vector::vector;
  using FixedVector::vector::operator=;
  using FixedVector::vector::get_allocator;
  using FixedVector::vector::at;
  using FixedVector::vector::front;
  using FixedVector::vector::back;
  using FixedVector::vector::data;
  using FixedVector::vector::begin;
  using FixedVector::vector::cbegin
  using FixedVector::vector::end;
  using FixedVector::vector::cend;
  using FixedVector::vector::empty;
  using FixedVector::vector::size;
  using FixedVector::vector::operator[];
};