是否存在类似“动态大小不可调整大小的数组”的C ++类型?这种类型可以被认为是两件事之一:
vector<T>
但没有resize
,push_back
等array<T,N>
但其中N
是动态的而非静态的。我不想要只有在数组中的元素类型是不可复制类型时才有效的解决方案。我想要一个通用的解决方案。
答案 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[];
};