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

Dynamically sized non resizable array

本文关键字:数组 可调整 调整 动态      更新时间:2023-10-16

是否有一种C++类型充当"动态大小的不可调整大小的数组"?可以将这种类型视为以下两种情况之一:

  • vector<T>但没有resizepush_back等。
  • array<T,N>N是动态的而不是静态的。

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

是的,(几乎(有。 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[];
};