2016-10-16 2 views
0

ich den folgenden Code haben:bequemste Weg, um einen Vektor von Vektor darzustellen verweist

#include <iostream> 
#include <vector> 


using namespace std; 

using float_vec = vector<float>; 

float foo(vector<float_vec*> vec) 
{ 
    // ... 

    return (*vec[0])[0] = 1; 
} 


int main() 
{ 
    std::vector<float> i_1(1,0); 
    // ... 
    std::vector<float> i_n(1,0); 

    std::cout << i_1[ 0 ] << std::endl; 

    foo({&i_1, /* ..., */ &i_n}); 

    std::cout << i_1[ 0 ] << std::endl; 

    return 0; 
} 

Wie Sie oben sehen können, habe ich einen Vektor von Float-Vektoren zu einer Funktion foo passieren hier, wo hat foo Nebenwirkungen auf seiner Eingabe. Dafür benutze ich einen Vektor von Zeigern; Leider macht dies den Code ein wenig unlesbar -> "(* vec [0]) [0]" und "& i_1", ..., "& i_n". Gibt es eine elegantere Möglichkeit, einen Zeigervektor in C++ darzustellen?

Ich versuchte std :: refrence_wrappers wie folgt

#include <iostream> 
#include <vector> 


using namespace std; 

using float_vec = std::reference_wrapper< vector<float> >; 

float foo(vector<float_vec> vec) 
{ 
    // ... 

    return vec[0].get()[0] = 1; 
} 


int main() 
{ 
    std::vector<float> i_1(1,0); 
    // ... 
    std::vector<float> i_n(1,0); 

    std::cout << i_1[ 0 ] << std::endl; 

    foo({i_1, /* ..., */ i_n}); 

    std::cout << i_1[ 0 ] << std::endl; 

    return 0; 
} 

aber hier, die "get()" ärgert zu verwenden.

Hat jemand einen Vorschlag dafür, wie ein "Vektor von Zeigern/Referenzen" in C++ dargestellt werden soll?

Vielen Dank im Voraus.

Antwort

1

Wenn Sie nur den Vektor ändern möchten, den Sie an die Funktion übergeben, brauchen Sie keine Zeiger. Übergeben Sie einfach den Vektor als Referenz.

#include <iostream> 
#include <vector> 


using namespace std; 

using float_vec = vector<float>; 

float foo(vector<float_vec>& vec) 
{ 
    // anything you do to vec here will change the vector you pass to the function 

    return 1; 
} 
+0

Vielen Dank. Können Sie ein Codebeispiel angeben, das zeigt, wie die Vektoren "i_1", ..., "i_n" (meines Beispiels) in den Vektor Ihres Beispiels "float_vec" eingefügt werden müssen? –

+0

@abraham_hilbert Nicht gerade jetzt. Es ist jedoch ziemlich einfach. Rufen Sie es einfach mit Ihrem Objekt (Vektor) als Parameter auf, und dann werden alle Änderungen, die Sie innerhalb dieser Funktion vornehmen, im ursprünglichen Vektor ausgeführt. –

Verwandte Themen