当我执行以下语句时:
vector <int> v;
v的值到底是什么?
仅仅是指针指向存储块的开始吗?它的值是否为NULL?
有些人指出另一个问题的可能重复之处,而这个问题比这个问题更复杂,而较少关注比较以下问题:1)调用vector
类的默认构造函数,以及2)初始化一个我认为是的数组指向int
的指针。
答案 0 :(得分:1)
您的语法将调用不带参数的构造函数,也称为默认构造函数。根据{{3}},您可以看到它将创建一个空向量。
它指向的指针无关紧要,因为在容器为空时,您不应该取消引用其值。请注意,如果要存储内部指针的值,例如std::vector constructor documentation,则可以在向向量中添加元素时随时更改(从技术上讲,您可以预测指针何时会更改,但是一种很好的做法,好像指针总是在变化)。
答案 1 :(得分:1)
v的值到底是什么?
指针? -不
NULL-不。
nullptr-不。
v是类 idx vals sel
0 [True, False, True, False] [0, 1, 2, 3] [0, 2]
1 [False, False, False, True] [4, 5, 6, 7] [7]
2 [False, True, True, False] [8, 9, 10, 11] [9, 10]
的实例(其中T是int)。
在Ubuntu Linux 64位上,“ std::vector<T>
”占用24个字节,无论
或
对象的内脏
对于每个编译器,实现可能有所不同。
答案 2 :(得分:0)
vector <int> v;
v的值到底是什么?
这是默认初始化的语法。因此,对象将处于默认的初始化状态。对于std::vector
之类的类类型,默认初始化调用默认构造函数。 An online reference这样描述了vector的默认构造函数:
1)默认构造函数。构造一个空容器。如果未提供分配器,则从默认构造的实例中获取分配器。
仅仅是指针指向存储块的开始吗?它的值是否为NULL?
向量不是指针。
在其他成员中,向量实现确实包含一个指针,该指针可能指向向量管理的缓冲区-您可以使用std::vector::data
成员函数获得该指针的副本。默认初始化向量的内部指针的状态为 unspecified 。由于空向量不需要缓冲区,因此该指针可以为null,但不必为空。