动态大小的不可调整大小的数组
Dynamically sized non resizable array
有没有像 "dynamically sized non resizable array" 这样的 C++ 类型?这种类型可以认为是以下两种情况之一:
vector<T>
但没有 resize
、push_back
等
array<T,N>
但是 N
是动态的而不是静态的。
我不想要一个仅在数组中的元素类型为不可复制类型时才有效的解决方案。我想要一个通用的解决方案。
是的,(几乎)有。 std::unique_ptr<T[]>
。主模板针对这种情况进行了部分特化,它提供了适当的接口(运算符 []
、无运算符 *
等)
或者,您可以将 std::vector
包装在您自己的 class 中并限制其接口。您甚至可以通过使用非 public 继承从 std::vector
派生 class 并仅发布其接口的相关部分来做到这一点:
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[];
};
有没有像 "dynamically sized non resizable array" 这样的 C++ 类型?这种类型可以认为是以下两种情况之一:
vector<T>
但没有resize
、push_back
等array<T,N>
但是N
是动态的而不是静态的。
我不想要一个仅在数组中的元素类型为不可复制类型时才有效的解决方案。我想要一个通用的解决方案。
是的,(几乎)有。 std::unique_ptr<T[]>
。主模板针对这种情况进行了部分特化,它提供了适当的接口(运算符 []
、无运算符 *
等)
或者,您可以将 std::vector
包装在您自己的 class 中并限制其接口。您甚至可以通过使用非 public 继承从 std::vector
派生 class 并仅发布其接口的相关部分来做到这一点:
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[];
};