Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.
#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 ;

Δημοσ.

Επειδή το 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);
}
  • Like 2

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...