vector的构造函数中的size_type是什么意思?

What does size_type in the constructor of vector mean?

我使用的 vector 的构造函数规范是:

vector(size_type count, const T& value, const Allocator& alloc = Allocator());

我正在尝试初始化一个向量,我对size_type不是很熟悉。 cplusplus 和 cppreference 都没有 size_type 的条目。快速 Google 告诉我它是某种数据类型,用于表示容器等事物的大小、容量等(我认为)。我仍然不太确定我是否理解正确或如何使用它。

假设我希望初始化一个 int 向量 (10*n/3) + 1,其中 n 的类型为 int。我可以将计数转换为 long 类型吗?我什至做对了吗?如何理解和使用 size_type?

请忽略硬件方面的考虑,例如计算机是否可以首先分配足够的内存。稍后我会担心,现在我只想专注于理解这个概念。

std::vector<T>::size_type是一个无符号整数类型,可以表示分配模型中最大对象的大小。这通常会像 std::size_t.

除非你认为你会遇到最大整数值,否则你不需要担心这个;只要传入一个整数类型,编译器就会告诉你你是否做了一些离谱的事情。

是在std::vector里面定义的typedef;它实际上是 std::size_t 的同义词,而后者又是实现定义的无符号整数类型的 typedef,该类型能够保存可以在当前机器上创建的最大对象的大小。实际上,您可以将其视为某种无符号整数,在引用索引或元素计数时始终在整个 std::vector 界面中使用。

在 "regular" 机器上(你有 32 位整数),如果你没有达到元素计数代码中 "regular" int 的限制,你可以使用 int 对于没有问题的索引(实际上,对于无符号整数 arithmetic/comparisons 引起的细微错误,您实际上更安全)。

std::size_t 是一种数据类型,它足够大以容纳您的机器可以寻址的任何结构的大小。所以在 32 位机器上,这通常是一个 32 位无符号整数。

T::size_type 由许多容器定义,通常只重新定义 std::size_t(但严格来说不是必须的)。定义它的原因是,您可以只写 T::size_type x = T::your_operation(); 而不必考虑您使用的是哪个容器。您可以稍后切换容器,T::size_type 仍然是有效的 C++,不需要重新处理。