Próbuję uniknąć argumentów wyjściowych w moich funkcjach. Stara funkcja:Funkcja zwraca krotkę utworzoną z wektorów
void getAllBlockMeanError(
const vector<int> &vec, vector<int> &fact, vector<int> &mean, vector<int> &err)
Tutaj vec
argumentem jest wejście, fact
, mean
i err
są wyprowadzane argumentem. Próbowałem wyjściowym argumentem grupy do jednej krotce:
tuple< vector<int>, vector<int>, vector<int> >
getAllBlockMeanErrorTuple(const vector<int> &vec)
{
vector<int> fact, mean, err;
//....
return make_tuple(fact, mean, err);
}
Teraz mogę nazwać nową funkcję z:
tie(fact, mean, err) = getAllBlockMeanErrorTuple(vec);
wygląda czystsze do mnie. Chociaż mam pytanie, w jaki sposób działa przypisanie równe tie(fact, mean, err)
? Czy robi głęboką kopię lub ruch? Ponieważ fact
, mean
i err
wewnątrz getAllBlockMeanErrorTuple
zostaną zniszczone, mam nadzieję, że wykona ruch zamiast głębokiej kopii.
Nie jestem pewien, ale myślę, że jak napisane będzie kopiować wektory. Jeśli przeniesiesz wektory do 'make_tuple()', to powinny one zostać przeniesione. – Andy
Chciałbym użyć 'struct Result {wektor fakt; wektor średni; wektor err; }; 'zamiast krotki, aby mieć lepsze nazewnictwo dla gettera. –
Jarod42