zynif Δημοσ. 11 Μαρτίου 2014 Δημοσ. 11 Μαρτίου 2014 #include <iostream> #include <vector> using namespace std; void addItem(int val,vector<int> vec) { vec.push_back(val); } vector<int> add(int val,vector<int> vec) { vec.push_back(val); return vec; } int main() { vector<int> mainVector; addItem(0,mainVector); addItem(1,mainVector); addItem(2,mainVector); cout << mainVector.size() << endl; mainVector=add(0,mainVector); mainVector=add(1,mainVector); mainVector=add(3,mainVector); cout << mainVector.size() << endl; return 0; } Γιατί η addItems δεν προσθέτει τίποτα στο mainVector ;
defacer Δημοσ. 11 Μαρτίου 2014 Δημοσ. 11 Μαρτίου 2014 Επειδή το mainVector περνάει στη συνάρτηση by value, οπότε γίνεται αντίγραφό του και προσθέτεις στοιχεία στο αντίγραφο του οποίου η διάρκεια ζωής λήγει με το πέρας της συνάρτησης. Αν έχεις εμπειρία από άλλες γλώσσες όπως Java όπου όλα τα objects είναι στην ουσία references θα πρέπει να έχεις πάντα υπόψη ότι στη C++ που τα objects είναι values δε μπορείς να γράφεις κώδικα copy/paste style. Το σωστό (αν και προφανώς δεν έχει νόημα) δεν είναι ούτε η addItem ούτε η add η οποία κάνει συνέχεια αντίγραφα του ίδιου vector χωρίς κανένα λόγο καταναλώνοντας πόρους αδίκως αλλά void addItem(int val,vector<int>& vec) { // με & γίνεται reference to vector<int> vec.push_back(val); } 2
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα