C++ 向量::将_向后推(myVec)到堆上。你们能避免堆栈上的myVec头信息吗?

C++ 向量::将_向后推(myVec)到堆上。你们能避免堆栈上的myVec头信息吗?,c++,memory-management,vector,stl,heap-memory,C++,Memory Management,Vector,Stl,Heap Memory,给定以下代码段: vector<vector<int>> *Vec_2D = new vector<vector<int>>; vector<int> int_list; // declaration and header info on stack Vec_2D.push_back(int_list); for(int i=0; i < 10; i++) { (*Vec_2D)[0].push_back(i);

给定以下代码段:

vector<vector<int>> *Vec_2D = new vector<vector<int>>;
vector<int> int_list;       // declaration and header info on stack
Vec_2D.push_back(int_list);

for(int i=0; i < 10; i++) {
  (*Vec_2D)[0].push_back(i);  // load some stuff into first array of Vec_2d
}
这种语法是否可能,
vector::push_back(新的myVec)
?这样我就避免了死亡。以及
int\u list
引用的堆栈上向量的标题信息


干杯

您可以使用
emplace\u back

#include <vector>
using namespace std;

int main()
{
    vector<vector<int>> *Vec_2D = new vector<vector<int>>;

    Vec_2D->emplace_back(vector<int>{}); // avoid declaration on stack

    for (int i=0; i < 10; i++) {
        (*Vec_2D)[0].push_back(i);  // load some stuff into first array of Vec_2d
    }

    return 0;
}
#包括
使用名称空间std;
int main()
{
vector*Vec_2D=新矢量;
Vec_2D->emplace_back(vector{});//避免堆栈上的声明
对于(int i=0;i<10;i++){
(*Vec_2D)[0]。推回(i);//将一些内容加载到Vec_2D的第一个数组中
}
返回0;
}

您想做什么?向量的内容是动态分配的,因此实际上没有理由动态分配向量本身。您自己尝试时观察到了什么?类似于
Vec_2D->push_back(vector())您正在搜索什么?在此代码段中,int_列表(在堆栈上)没有元素,因此没有堆分配。什么是浪费?头信息的20-32字节?毫无疑问,你还有更重要的事情要做。正如其他人所指出的,
push_back
emplace_back
可能是你想要的
push_back
将在堆栈上构造一个临时向量,
emplace_back
不会。但是,直到C++11才到达。另一种选择是简单地将堆栈分配的向量(int_list)括起来,并将其推到花括号内——然后它将是临时的,并在块退出时删除。在这种情况下,您也可以直接填充它,然后将它交换到您推回或安置回的向量中的某个位置。
#include <vector>
using namespace std;

int main()
{
    vector<vector<int>> *Vec_2D = new vector<vector<int>>;

    Vec_2D->emplace_back(vector<int>{}); // avoid declaration on stack

    for (int i=0; i < 10; i++) {
        (*Vec_2D)[0].push_back(i);  // load some stuff into first array of Vec_2d
    }

    return 0;
}