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
cpp:stl:array [2020/05/27 16:02]
gthanos [std::array]
cpp:stl:array [2021/06/06 19:56]
Line 1: Line 1:
-====== std::array ====== 
- 
-Πρόκειται για μία δομή πίνακα του οποίου το μέγεθος ορίζεται κατά την μεταγλώττιση (δηλαδή κατά τη δήλωση του πίνακα) και παραμένει αμετάβλητο. Μπορείτε να διατρέξετε το πίνακα χρησιμοποιώντας //iterators// ή την κλασική μορφή του for που γνωρίζεται από τη γλώσσα C. 
- 
-===== Ορισμός και διάτρεξη πίνακα ===== 
- 
-<code cpp array_iterator.cpp> 
-#include <iostream> 
-#include <array> 
-using namespace std; 
- 
-int main () { 
-  std::array<int,6> myarray = {10, 20, 30, 40, 50, 60} ; 
- 
-  std::cout << "myarray fw:"; 
-  for (auto it=myarray.cbegin() ; it < myarray.cend(); ++it ) 
-    std::cout << ' ' << *it;   // cannot modify *it 
-  std::cout << '\n'; 
-   
-  cout << "myarray bw:"; 
-  for (auto rit=myarray.crbegin() ; rit < myarray.crend(); ++rit ) 
-    std::cout << ' ' << *rit;   // cannot modify *rit 
-  std::cout << '\n'; 
-   
-  std::cout << "myarray +10 fw:"; 
-  for (auto it=myarray.cbegin() ; it < myarray.cend(); ++it ) { 
-    *it += 10; 
-    std::cout << ' ' << *it;   // cannot modify *it 
-  } 
-  std::cout << '\n'; 
-   
-  cout << "myarray +100 bw:"; 
-  for (auto rit=myarray.rbegin() ; rit < myarray.rend(); ++rit ){ 
-    *it += 100; 
-    std::cout << ' ' << *rit;   // cannot modify *rit 
-  } 
-  std::cout << '\n'; 
-} 
-</code> 
- 
-===== Πρόσβαση στα στοιχεία του πίνακα ===== 
- 
-<code cpp array_access_op[].cpp> 
-#include <iostream> 
-#include <array> 
-using namespace std; 
- 
-int main () { 
-  array<int,6> myarray = {10, 20, 30, 40, 50, 60}; 
- 
-  myarray[5] = 600; 
-  cout << "myarray[5]:" << myarray[5] << endl; 
-  myarray[6] = 1; 
-  cout << "myarray[6]:" << myarray[6] << endl; 
-} 
-</code> 
- 
-Παρατηρούμε ότι στον παραπάνω κώδικα η πρόσβαση εκτός ορίων παράγει τερματισμό του προγράμματος μέσω segmentation fault. Εάν θέλουμε να μπορούμε να ελέγχουμε τις πιθανές λανθασμένες προσπελάσεις μέσω της διαχείρισης ενός exception υπάρχει η ισοδύναμη συνάρτηση [[http://www.cplusplus.com/reference/array/array/at/|at]] η οποία σε περιπτώσεις πρόσβασης εκτός ορίων πετάει exception του τύπου ''std::out_of_range'' το οποίο καλούμαστε να διαχειριστούμε. 
- 
-<code cpp array_access_at.cpp> 
-#include <iostream> 
-#include <array> 
-using namespace std; 
- 
-int main () { 
-  array<int,6> myarray = {10, 20, 30, 40, 50, 60}; 
- 
-  myarray[5] = 600; 
-  cout << "myarray[5]:" << myarray[5] << endl; 
-  try { 
-    myarray.at(10) = 1; 
-    cout << "myarray[10]:" << myarray[10] << endl; 
-  } catch(std::out_of_range& ex) { 
-    cout << ex.what() << endl; 
-  } 
-} 
-</code> 
- 
- 
- 
- 
  
cpp/stl/array.txt · Last modified: 2021/06/06 19:56 (external edit)