This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
cpp:stl:array [2020/05/27 16:03] gthanos [Ορισμός και διάτρεξη πίνακα] |
cpp:stl:array [2021/06/06 19:56] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== std::array ====== | ||
| - | |||
| - | Πρόκειται για μία δομή πίνακα του οποίου το μέγεθος ορίζεται κατά την μεταγλώττιση (δηλαδή κατά τη δήλωση του πίνακα) και παραμένει αμετάβλητο. Μπορείτε να διατρέξετε το πίνακα χρησιμοποιώντας // | ||
| - | |||
| - | ===== Ορισμός και διάτρεξη πίνακα ===== | ||
| - | |||
| - | <code cpp array_iterator.cpp> | ||
| - | #include < | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | int main () { | ||
| - | std:: | ||
| - | |||
| - | std::cout << " | ||
| - | for (auto it=myarray.cbegin() ; it < myarray.cend(); | ||
| - | std::cout << ' ' << *it; // cannot modify *it | ||
| - | std::cout << ' | ||
| - | | ||
| - | cout << " | ||
| - | for (auto rit=myarray.crbegin() ; rit < myarray.crend(); | ||
| - | std::cout << ' ' << *rit; // cannot modify *rit | ||
| - | std::cout << ' | ||
| - | | ||
| - | std::cout << " | ||
| - | for (auto it=myarray.cbegin() ; it < myarray.cend(); | ||
| - | *it += 10; | ||
| - | std::cout << ' ' << *it; // cannot modify *it | ||
| - | } | ||
| - | std::cout << ' | ||
| - | | ||
| - | cout << " | ||
| - | for (auto rit=myarray.rbegin() ; rit < myarray.rend(); | ||
| - | *it += 100; | ||
| - | std::cout << ' ' << *rit; // cannot modify *rit | ||
| - | } | ||
| - | std::cout << ' | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <code cpp array_iterator.cpp> | ||
| - | #include < | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | int main () { | ||
| - | std:: | ||
| - | |||
| - | for(int i=0; i< | ||
| - | std::cout << ' ' << myarray[i]; | ||
| - | std::cout << endl; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Πρόσβαση στα στοιχεία του πίνακα ===== | ||
| - | |||
| - | <code cpp array_access_op[].cpp> | ||
| - | #include < | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | int main () { | ||
| - | array< | ||
| - | |||
| - | myarray[5] = 600; | ||
| - | cout << " | ||
| - | myarray[6] = 1; | ||
| - | cout << " | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Παρατηρούμε ότι στον παραπάνω κώδικα η πρόσβαση εκτός ορίων παράγει τερματισμό του προγράμματος μέσω segmentation fault. Εάν θέλουμε να μπορούμε να ελέγχουμε τις πιθανές λανθασμένες προσπελάσεις μέσω της διαχείρισης ενός exception υπάρχει η ισοδύναμη συνάρτηση [[http:// | ||
| - | |||
| - | <code cpp array_access_at.cpp> | ||
| - | #include < | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | int main () { | ||
| - | array< | ||
| - | |||
| - | myarray[5] = 600; | ||
| - | cout << " | ||
| - | try { | ||
| - | myarray.at(10) = 1; | ||
| - | cout << " | ||
| - | } catch(std:: | ||
| - | cout << ex.what() << endl; | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||