Περισσότερα
Ποιος είναι ο ευκολότερος τρόπος για να αρχικοποιήσετε ένα std::vector με σκληρά κωδικοποιημένα στοιχεία;
Μπορώ να δημιουργήσω έναν πίνακα και να τον αρχικοποιήσω ως εξής:
int a[] = {10, 20, 30};
Πώς μπορώ να δημιουργήσω ένα std::vector
και να το αρχικοποιήσω παρόμοια κομψά;
Ο καλύτερος τρόπος που γνωρίζω είναι:
std::vector<int> ints;
ints.push_back(10);
ints.push_back(20);
ints.push_back(30);
Υπάρχει καλύτερος τρόπος;
577
3
Αν ο μεταγλωττιστής σας υποστηρίζει την C++11, μπορείτε απλά να κάνετε:
Αυτό είναι διαθέσιμο στο GCC από την έκδοση 4.4. Δυστυχώς, το VC++ 2010 φαίνεται να υστερεί σε αυτό το θέμα.
Εναλλακτικά, η βιβλιοθήκη Boost.Assign χρησιμοποιεί μη μακροσκοπική μαγεία για να επιτρέψει τα εξής:
Or:
Αλλά να έχετε κατά νου ότι αυτό έχει κάποια επιβάρυνση (βασικά, το
list_of
κατασκευάζει έναstd::deque
κάτω από την κουκούλα), οπότε για κώδικα με κρίσιμες επιδόσεις θα ήταν καλύτερα να κάνετε αυτό που λέει ο Yacoby.Μια μέθοδος θα ήταν να χρησιμοποιήσετε τον πίνακα για να αρχικοποιήσετε το διάνυσμα
Στη C++0x θα μπορείτε να το κάνετε με τον ίδιο τρόπο που το κάνατε με έναν πίνακα, αλλά όχι στο τρέχον πρότυπο.
Με μόνη γλωσσική υποστήριξη μπορείτε να χρησιμοποιήσετε:
Αν μπορείτε να προσθέσετε άλλες βιβλιοθήκες θα μπορούσατε να δοκιμάσετε boost::assignment:
Για να αποφύγετε τον σκληρό προγραμματισμό του μεγέθους ενός πίνακα: