vector::push_back(myVec) 到堆上。你能避免堆栈上的 myVec header 信息吗?

vector::push_back(myVec) on to heap. Can you avoid myVec header information on stack?

给定以下代码片段:

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
}

我在栈上声明int_list,然后在堆上push_backVec_2D。 Header int_list 的信息现在在堆栈中;我知道 int_list 的元素在堆上。这似乎很浪费。

这可以避免吗?类似于:

vector<vector<int>> *Vec_2D = new vector<vector<int>>;

Vec_2D.push_back(new 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
}

这种语法可行吗,vector::push_back(new myVec)?这样我就避免了声明。在堆栈上,以及int_list引用的堆栈上向量的header信息。

干杯!!

你可以使用 emplace_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;
}