我在头文件中声明了两个向量,如下所示:
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] 使它起作用?
为什么堆栈和堆之间存在这种差异..?
这不是关于堆栈与堆的问题。这是关于对象和对象指针之间的区别。没有理由期望这两者的行为相同。
这有效
vector1 = { {1,2},{10,20},{5,4},{8,23} };
因为
std::vector
有一个初始化列表构造函数。
这失败了
vector2 = {{1,2},{10,20},{5,4},{8,23}};
因为这没有意义。指针是单个值,没有构造函数可以使其工作。
通常你几乎不想动态分配
std::vector
无论如何。