User Tools

Site Tools


cpp:stl:array

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
cpp:stl:array [2020/05/27 16:02]
gthanos [std::array]
cpp:stl:array [2020/06/01 09:02]
gthanos [std::array]
Line 1: Line 1:
 ====== std::array ====== ====== std::array ======
  
-Πρόκειται για μία δομή πίνακα του οποίου το μέγεθος ορίζεται κατά την μεταγλώττιση (δηλαδή κατά τη δήλωση του πίνακακαι παραμένει αμετάβλητο. Μπορείτε να διατρέξετε το πίνακα χρησιμοποιώντας //iterators// ή την κλασική μορφή του for που γνωρίζεται από τη γλώσσα C.+Πρόκειται για μία δομή πίνακα του οποίου το μέγεθος ορίζεται κατά τη δήλωση του πίνακα και παραμένει αμετάβλητο. Μπορείτε να διατρέξετε το πίνακα χρησιμοποιώντας //iterators// ή με χρήση for που γνωρίζεται από τη γλώσσα C. H δομή //std::array// υποστηρίζει random access iterators. 
 + 
 +===== Επίδοσης της δομής ===== 
 + 
 +  * Η πράξη της ένθεσης ή της διαγραφής από τον τέλος του πίνακα έχει σταθερό κόστος **(O(1))**.  
 +  * Η πράξη της ένθεσης ή της διαγραφής από το μέσο ή την αρχή του πίνακα συνεπάγεται την μετακίνηση όλων των στοιχείων που βρίσκονται δεξιότερα κατά μία θέση. Η επίδοση της εξαρτάται από την θέση της ένθεσης ή της διαγραφής σε σχέση με το τέλος του πίνακα. Ο επιμερισμένος χρόνος της συγκεκριμένης πράξης είναι γραμμικός στο μέγεθος των αποθηκευμένων στοιχείων του πίνακα **(Ο(Ν))**. 
 +  * Η πράξη της αναζήτησης είναι γραμμική στο μέγεθος των στοιχείων του πίνακα **(Ο(Ν))**. 
 +  * Η πρόσβαση στο i-στο στοιχείο του πίνακα έχει κόστος 1. 
  
 ===== Ορισμός και διάτρεξη πίνακα ===== ===== Ορισμός και διάτρεξη πίνακα =====
Line 36: Line 44:
   }   }
   std::cout << '\n';   std::cout << '\n';
 +}
 +</code>
 +
 +<code cpp array_for.cpp>
 +#include <iostream>
 +#include <array>
 +using namespace std;
 +
 +int main () {
 +  std::array<int,6> myarray = {10, 20, 30, 40, 50, 60} ;
 +
 +  for(int i=0; i<myarray.size(); i++)
 +    std::cout << ' ' << myarray[i];
 +  std::cout << endl;
 } }
 </code> </code>
Line 56: Line 78:
 </code> </code>
  
-Παρατηρούμε ότι στον παραπάνω κώδικα η πρόσβαση εκτός ορίων παράγει τερματισμό του προγράμματος μέσω segmentation fault. Εάν θέλουμε να μπορούμε να ελέγχουμε τις πιθανές λανθασμένες προσπελάσεις μέσω της διαχείρισης ενός exception υπάρχει η ισοδύναμη συνάρτηση [[http://www.cplusplus.com/reference/array/array/at/|at]] η οποία σε περιπτώσεις πρόσβασης εκτός ορίων πετάει exception του τύπου ''std::out_of_range'' το οποίο καλούμαστε να διαχειριστούμε.+Παρατηρούμε ότι στον παραπάνω κώδικα η πρόσβαση εκτός ορίων παράγει τερματισμό του προγράμματος μέσω segmentation fault. Εάν θέλουμε να μπορούμε να ελέγχουμε τις πιθανές λανθασμένες προσπελάσεις μέσω της διαχείρισης ενός exception υπάρχει η ισοδύναμη συνάρτηση [[http://www.cplusplus.com/reference/array/array/at/|at]] η οποία σε περιπτώσεις πρόσβασης εκτός ορίων πετάει exception του τύπου ''std::out_of_range''το οποίο στη συνέχεια καλούμαστε να διαχειριστούμε.
  
 <code cpp array_access_at.cpp> <code cpp array_access_at.cpp>
cpp/stl/array.txt · Last modified: 2021/06/06 19:56 (external edit)