2016-06-20 6 views
1

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 !!

+0

Was Sie versuchen zu tun? Der Inhalt eines Vektors wird dynamisch zugewiesen, so dass es keinen Grund gibt, den Vektor selbst dynamisch zuzuordnen. – NathanOliver

+0

Was haben Sie beobachtet, als Sie es selbst ausprobiert haben? –

+2

Ist etwas wie 'Vec_2D-> push_back (Vektor ());' wonach Sie suchen? – lorro

Antwort

1

könnten Sie emplace_back verwenden:

#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; 
} 
Verwandte Themen