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

toh*_*ava 10 c++ arrays boost stl vector

是否有一个C++类型,就像一个"动态大小不可调整大小的数组"?这种类型可以被认为是两件事之一:

  • vector<T>但没有resize,push_back等等.
  • array<T,N>但哪里N是动态的而不是静态的.

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

Rei*_*ica 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[];
};
Run Code Online (Sandbox Code Playgroud)

  • 如果我错了,请纠正我,但这需要是一个`const`,否则有人可以替换指针.对?`const`允许它真正起到一次性可调整大小的矢量的作用,而不是其他任何东西. (2认同)
  • @VictorEijkhout我显然错过了导入函数列表中的`operator []`.谢谢你指出来. (2认同)