向量的初始化

Initialization of vectors

本文关键字:初始化 向量      更新时间:2023-10-16

当我执行以下语句时:

vector <int> v;

v 的值到底是多少?

它只是指向内存块开头的指针吗?它的值会为空吗?

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

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

它指向的指针无关紧要,因为您不应该在容器为空时取消引用其值。请注意,如果你想存储内部指针的值,比如 std::vector::d ata((,它可能会在你向向 vector 添加元素时发生变化(嗯,从技术上讲,你可以预测指针何时会改变,但最好这样做,好像指针总是改变(。

v 的值到底是多少?

  • 指针? - 不。

  • 空 - 否。

  • 空PTR - 否。

v 是类std::vector<T>的一个实例(其中 T 是 int(。

在 Ubuntu Linux 64 位上,一个"std::vector<T> tVec;"占用 24 个字节,而不管

  • 尺寸(T(,

  • 元素数。

对象的内脏int 数组不同,但实现确实维护了一个 T 数组,可能在动态内存中。

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

vector <int> v;

v 的值到底是多少?

这是默认初始化的语法。因此,对象将处于默认初始化状态。对于类类型,如std::vector,默认初始化调用默认构造函数。在线参考这样描述向量的默认构造函数:

1( 默认构造函数。构造一个空容器。如果未提供分配器,则从默认构造的实例获取分配器。


它只是指向内存块开头的指针吗?它的值会为空吗?

向量不是指针。

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