向量的初始化

Initialization of vectors

当我执行以下语句时:

vector <int> v;

v 的值到底是多少?

它只是一个指向内存块开始的指针吗?它的值会是 NULL 吗?

一些人指出了另一个比这个问题更复杂的问题可能重复的问题,并且较少关注 1) 调用 vector class 的默认构造函数和 2) 初始化的比较一个数组,我认为它是指向 int.

的指针

您的语法将调用不带参数的构造函数,也称为默认构造函数。根据std::vector constructor documentation,你可以看到它会创建一个空向量。

它指向的指针并不重要,因为您不应该在容器为空时取消引用它的值。请注意,如果您想存储内部指针的值,例如 std::vector::data(),它可能会在您向向量添加元素时随时更改(好吧,从技术上讲,您可以预测指针何时会更改,但它是一个很好的做法,就像指针总是在变化一样。

What exactly will the value of v be?

  • 指针? - 不。

  • NULL - 没有。

  • nullptr - 没有。

v 是 class std::vector<T> 的实例(其中 T 是整数)。

在Ubuntu Linux 64位上,一个“std::vector<T> tVec;”不管

如何都占用24个字节
  • sizeof(T),

  • 元素数量。

对象的内部结构类似于一个 int 数组,但实现确实维护了一个 T 数组,可能在动态内存中。

对于每个编译器,实现可能会有所不同。

vector <int> v;

What exactly will the value of v be?

这是默认初始化的语法。因此该对象将处于默认初始化状态。对于 class 类型,例如 std::vector,默认初始化调用默认构造函数。 An online reference这样描述vector的默认构造函数:

1) Default constructor. Constructs an empty container. If no allocator is supplied, allocator is obtained from a default-constructed instance.


Will it just be a pointer that points to the start of a memory block? Will its value be NULL?

矢量不是指针。

在其他成员中,矢量实现确实包含一个指针,该指针可能指向矢量管理的缓冲区 - 您可以使用 std::vector::data 成员函数获取该指针的副本。默认初始化向量的内部指针的状态是未指定。由于空向量不需要缓冲区,因此该指针可能为空 - 但不是必需的。