c++ - 动态大小的不可调整大小的数组

标签 c++ arrays boost vector stl

<分区>

是否有一种 C++ 类型像“动态大小的不可调整大小的数组”?这种类型可以被认为是以下两种情况之一:

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

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

最佳答案

是的,(几乎)有。 std::unique_ptr<T[]> .主模板针对这种情况进行了部分特化,它提供了适当的接口(interface)(运算符 [],无运算符 * 等)

或者,您可以包装 std::vector在你自己的类中并限制它的接口(interface)。您甚至可以通过从 std::vector 派生一个类来做到这一点使用非公共(public)继承并仅发布其接口(interface)的相关部分:

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[];
};

关于c++ - 动态大小的不可调整大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878287/

相关文章:

c++ - 从基类方法调用子类虚方法

arrays - 创建 UArray 的自定义实例

ios - 离开该 View 后维护数组中的数据?

java - 按内部数组的字段之一对多维数组进行排序

c++ - 使用 boost asio 接收文本的最有效方式?

c++ - Boost Graph Library - 将 vector 插入边缘属性

c++ - 容器的 for 循环语法 - 是否制作了拷贝?

c++ - OpenCV - 不能画长线

c++ - Boost asio 无法在所有线程上运行 io 服务。io 服务在第一个线程调用时阻塞

c++ - 在 Vortex86DX 上从头开始构建和编译 GCC 5.2.0 时出错