Zwei Arrays als Rückgabewert einer Funktion?
-
Hallo Leute,
lange hab ich nichts mehr mit C++ gemacht, aber nun stehe ich mal wieder vor einem Problem. Ich habe eine Hauptfunktion aus der anderen Funktionen aufgerufen werden. Allerdings habe ich mehrere Arrays die als Ausgabewert zurückgegeben werden sollen. Bisher habe ich es mit einem Vektor so gemacht:
#include "functions.h" int main(){ vector<vector<double> > vec1, vec2 //2D long a, b, c //(...) füllt beide Vektoren und Variablen vec1 = fct_test(a, b, c) return 0; } vector<vector<double> > fct_test(long a, long b, long c){ // (...) verändert vec1 in Abhängigkeit von a, b und c }
Hier wird allerdings nur der vec1 beschrieben zurück gegeben. Wie kann ich es machen, dass beide Vektoren geändert werden und Rückgabewerte sind? Hab schon Bücher gewälzt und auch gegooglet, allerdings nichts passendes gefunden. Möglicherweise fehlen mir auch die richtigen Suchbegriffe.
Villeicht hat ja hier jemande eine Idee
.
Vielen Dank schonmal!!!
-
vec2 = vec1 = fct_test(a, b, c)
?
-
Du kannst du beiden vectoren per Referenz an deine Funktion übergeben und dann in der Funktion direkt bearbeiten.
-
std:pair<std::vector<std::vector<double>>, std::vector<std::vector<double>> > fct_test(long a, long b, long c){ // (...) verändert vec1 in Abhängigkeit von a, b und c }
-
#include <vector> #include <utility> #include <tuple> // C++11, hier ist std::tie drin using namespace std; void aendere_zwei_vektoren( vector<double> & v1, // pass by reference vector<double> & v2) // pass by reference { v1.push_back(17); v2.push_back(29); } pair<vector<double>,vector<double> > gibt_zwei_vektoren_zurueck() { pair<vector<double>,vector<double> > ret; ret.first.resize(100); ret.second.resize(200); ::: return ret; // Alternative in C++11: // vector<double> v1 (100); // vector<double> v2 (200); // ::: // return make_pair(move(v1),move(v2)); } int main() { pair<vector<double>,vector<double> > p = gibt_zwei_vektoren_zurueck(); aendere_zwei_vektoren(p.first,p.second); vector<double> nocheiner1; vector<double> nocheiner2; tie(nocheiner1,nocheiner2) = gibt_zwei_vektoren_zurueck(); // C++11 }