向量的初始化
Initialization of vectors
当我执行以下语句时:
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 - 但不是必需的。
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 在C++中初始化向量映射的最有效方法
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 用向量的向量元素初始化向量的空向量
- 初始化向量数组,其中每个向量的大小为 0
- 如何初始化向量<unordered_map<*,*>>
- 如何在元组初始化向量中删除样板?
- C++ 通过函数声明后初始化向量
- 特征::向量;在函数中使用 Eigen::Matrix3f 的值初始化向量,大于 4 个条目
- 使用所述填充构造函数初始化向量中的向量
- 制作可用于初始化向量的迭代器
- 如何使用sregex_token_iterator对象初始化向量
- 用空向量 c++ 的 M 元素初始化向量
- 用reference_wrapper本地初始化向量
- 将向量元素与字符串元素进行比较,而不初始化向量
- 使用 reference_wrappers 初始化向量
- 从不同类型的容器的迭代器初始化向量
- 在具有容量/调整大小的类中初始化向量
- 在头文件中声明和初始化向量
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量