C++ 如何访问结构内部的向量?

C++ 如何访问结构内部的向量?,c++,vector,structure,C++,Vector,Structure,我想知道如何访问下面定义的结构中的向量 #include<vector> #include<iostream> #include<stdlib.h> using namespace std; struct Hello{ vector<int>vec ; }; struct Hello *h[1][1]; int main() { struct Hello *v = (struct Hello *)malloc(sizeof(

我想知道如何访问下面定义的结构中的向量

#include<vector>
#include<iostream>
#include<stdlib.h>

using namespace std;

struct Hello{
    vector<int>vec ;
};

struct Hello *h[1][1];

int main()
{
    struct Hello *v = (struct Hello *)malloc(sizeof(struct Hello));
    h[0][0]=v;
    0][0]->vec.push_back(13);
    //How to add 13 to vector vec?
    //It shows an error. But why?
    cout<<h[0][0]->vec.at(0)<<endl;
    return 0;
}
这就是你的问题:

struct Hello *v = (struct Hello *)malloc(sizeof(struct Hello));
顺便说一句,每次在该行中使用struct时,它都是多余的

它确实为Hello分配空间,但不构造Hello。 Hello有一个非平凡的ctor,因为它的成员std::vector有一个,因此省略对ctor的调用是错误的

要么使用新的布局来构建hello,要么更好地分配和构造一个C++的方式:

Hello *v = new Hello;
// andd later deallocate
delete v;
最好是完全避免动态分配:

Hello h;

成员访问使用。或者对于指针-> ./p>这不是你在C++中编写代码的方式。p> 首先,正如评论中正确提到的,永远不要使用malloc。如果需要动态内存分配,请使用new。否则,您将拥有非构造对象,就像您已经被告知的那样

第二,在不需要的时候不要使用新的。如果需要动态内存分配,很可能需要使用智能指针管理此内存,如std::unique\u ptr。要构造唯一的_ptr,请使用std::make_unique函数。使用make_unique将使您以零成本实现程序无泄漏和异常安全。使用make_unique可以防止由于异常而导致的一些棘手的泄漏情况,并在编写代码时为您节省一些击键次数。当然是零成本。看

第三,这里甚至不需要动态内存分配。这不是Java,我们喜欢在堆栈上分配东西。请记住,std::vector本身执行动态内存分配以存储其缓冲区。由于移动语义,它可以在运行时有效地移动此存储。在动态内存中分配向量本身没有多大意义。看


对每一个强调的项目进行详细的搜索。

不要在C++中使用Maloc,使用新的也不要使用新的