den folgenden Code-Schnipsel Gegeben:vector :: push_back (myVec) auf Heap. Können Sie myVec-Header-Informationen auf dem Stack vermeiden?
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
}
Ich erkläre int_list
auf dem Stapel, und dann push_back
in Vec_2D
auf dem Heap. Header-Informationen für int_list
sind jetzt auf Stack; Ich weiß, dass die Elemente von int_list
auf Heap sind. Dies scheint verschwenderisch.
Kann dies vermieden werden? Etwas wie:
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
}
Ist diese Syntax möglich, vector::push_back(new myVec)
? Auf diese Weise vermeide ich das Deklinieren. auf Stapel und die Kopfinformation des Vektors auf dem Stapel, auf den sich int_list
bezieht.
Prost !!
Was Sie versuchen zu tun? Der Inhalt eines Vektors wird dynamisch zugewiesen, so dass es keinen Grund gibt, den Vektor selbst dynamisch zuzuordnen. – NathanOliver
Was haben Sie beobachtet, als Sie es selbst ausprobiert haben? –
Ist etwas wie 'Vec_2D-> push_back (Vektor());' wonach Sie suchen? –
lorro