向量的初始化
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
成员函数获取该指针的副本。默认初始化向量的内部指针的状态是未指定。由于空向量不需要缓冲区,因此该指针可能为空 - 但不是必需的。
当我执行以下语句时:
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;
”不管
- 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
成员函数获取该指针的副本。默认初始化向量的内部指针的状态是未指定。由于空向量不需要缓冲区,因此该指针可能为空 - 但不是必需的。