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_back
入Vec_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;
}
给定以下代码片段:
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_back
入Vec_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;
}