在堆栈与堆上定义/初始化向量

问题描述 投票:0回答:1

我在头文件中声明了两个向量,如下所示:

struct MYDATA
{
    uint8_t A = 0;
    uint8_t B = 0;
};

std::vector<MYDATA> vector1;
std::vector<MYDATA> *vector2 = new std::vector<MYDATA>;

然后在cpp文件中,我尝试像这样初始化:

vector1 = { {1,2},{10,20},{5,4},{8,23} };

vector2 = {{1,2},{10,20},{5,4},{8,23}};

第一个初始化有效,第二个说“初始化器太多”...... 然后,如果我将第二行更改为:

vector2[0] = {{1,2},{10,20},{5,4},{8,23}};

它可以编译,我可以访问数据......没问题。这里我用整数来简化,但我的实际结构也可能包含指针...所以,我想有必要了解这里发生的情况,为什么堆栈和堆之间存在这种差异..?为什么第二个向量名称后面的 [0] 使它起作用?

c++ vector stack heap
1个回答
0
投票

为什么堆栈和堆之间存在这种差异..?

这不是关于堆栈与堆的问题。这是关于对象和对象指针之间的区别。没有理由期望这两者的行为相同。

这有效

vector1 = { {1,2},{10,20},{5,4},{8,23} };

因为

std::vector
有一个初始化列表构造函数。

这失败了

vector2 = {{1,2},{10,20},{5,4},{8,23}};

因为这没有意义。指针是单个值,没有构造函数可以使其工作。


通常你几乎不想动态分配

std::vector
无论如何。

© www.soinside.com 2019 - 2024. All rights reserved.