动态调整大小的不可调整大小的数组 是否有一个C++类型,它的行为类似于“动态大小的不可调整数组”?这种类型可以被认为是两件事之一: 矢量但不带调整大小,推回等 array但其中N是动态的,而不是静态的

动态调整大小的不可调整大小的数组 是否有一个C++类型,它的行为类似于“动态大小的不可调整数组”?这种类型可以被认为是两件事之一: 矢量但不带调整大小,推回等 array但其中N是动态的,而不是静态的,c++,arrays,boost,vector,stl,C++,Arrays,Boost,Vector,Stl,我不想要一个只有在数组中的元素类型是不可复制类型时才有效的解决方案。我想要一个通用的解决方案。是的,基本上是。对于这种情况,主模板具有部分专业化,提供了适当的界面(操作员[],无操作员*等) 或者,您可以在自己的类中包装std::vector,并限制其接口。您甚至可以使用非公共继承从std::vector派生一个类,并只发布其接口的相关部分: template <class T, class A = std::allocator<T>> struct FixedVecto

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

是的,基本上是。对于这种情况,主模板具有部分专业化,提供了适当的界面(操作员
[]
,无操作员
*
等)

或者,您可以在自己的类中包装
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[];
};
模板
结构FixedVector:private std::vector
{
使用FixedVector::vector::vector;
使用FixedVector::vector::operator=;
使用FixedVector::vector::get_分配器;
使用FixedVector::vector::at;
使用FixedVector::vector::front;
使用FixedVector::vector::back;
使用FixedVector::vector::data;
使用FixedVector::vector::begin;
使用FixedVector::vector::cbegin
使用FixedVector::vector::end;
使用FixedVector::vector::cend;
使用FixedVector::vector::empty;
使用FixedVector::vector::size;
使用FixedVector::vector::运算符[];
};

您为什么需要这个?为什么你不能使用向量或数组?我希望我的类型尽可能精确。我计划使用一些
向量
,但只设置其大小一次,然后只更改其值。我更喜欢通过类型系统而不是注释来记录这一点。为什么数组类“只有”在类型不可复制的情况下才起作用?@tenfour:如果有人忘记了不应该调整其大小,那么就无法阻止这些函数被使用。如果依赖于稳定的迭代器和元素引用,这可能是灾难性的。@Cyber-这不是重复的。请注意,在最初的问题中,解决方案建议使用不可复制元素,我特别说我想要一个通用元素。如果我错了,请纠正我,但这需要是一个
常量
,否则有人可以替换指针。对吗?
const
允许它真正作为一个一次性可调整大小的向量而不是其他任何东西。使用
的非常好的技巧似乎就像使用
const std::vector
是显而易见的solution@Arvid这将阻止您修改元素。@VictorEijkhout我显然错过了
操作符[]
在导入的函数列表中。谢谢你指出这一点。