User Tools

Site Tools


cpp:stl:iterators

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:stl:iterators [2023/05/29 16:00] – [Κοινές συναρτήσεις για όλους τους containers για την επιστροφή των θέσεων αρχής και τέλους] gthanoscpp:stl:iterators [2023/05/30 18:48] (current) gthanos
Line 11: Line 11:
  
   * **Input Iterator:** Πρόκειται για έναν //iterator// από τον οποίο μπορούμε μόνο να διαβάσουμε το τρέχον στοιχείο της δομής στο οποίο δείχνει. Πρόκειται για έναν //iterator// ανάγνωσης του περιεχόμενου της δομής. Όλοι οι διαθέσιμοι //iterators// είναι //Input Iterators//. Παράδειγμα:   * **Input Iterator:** Πρόκειται για έναν //iterator// από τον οποίο μπορούμε μόνο να διαβάσουμε το τρέχον στοιχείο της δομής στο οποίο δείχνει. Πρόκειται για έναν //iterator// ανάγνωσης του περιεχόμενου της δομής. Όλοι οι διαθέσιμοι //iterators// είναι //Input Iterators//. Παράδειγμα:
-<code cpp>+ 
 +<code cpp input_iterator.cpp> 
 +#include <vector> 
 +#include <iostream> 
 +#define SIZE 10 
 +using namespace std; 
 +  
 +int main() { 
 +  vector<int> ints; 
 +  for(int i=0; i<10; i++) 
 +    ints.push_back(SIZE-i); 
 + 
   for(vector<int>::const_iterator it=ints.cbegin(); it!=ints.cend(); it++)   for(vector<int>::const_iterator it=ints.cbegin(); it!=ints.cend(); it++)
     cout << *it << " ";     cout << *it << " ";
   cout << endl;   cout << endl;
 +}
 </code> </code>
   * **Output Iterator:** Πρόκειται για έναν //iterator// μέσω του οποίου μπορούμε να διαβάσουμε και να γράψουμε στο τρέχον στοιχείο του //container//. Οι //iterators// που στον τύπο τους περιέχουν το συνθετικό //const_// (const_iterator, const_reverse_iterator) δεν ανήκουν στη συγκεκριμένη κατηγορία. Παραδείγματα:   * **Output Iterator:** Πρόκειται για έναν //iterator// μέσω του οποίου μπορούμε να διαβάσουμε και να γράψουμε στο τρέχον στοιχείο του //container//. Οι //iterators// που στον τύπο τους περιέχουν το συνθετικό //const_// (const_iterator, const_reverse_iterator) δεν ανήκουν στη συγκεκριμένη κατηγορία. Παραδείγματα:
-<code cpp>+<code cpp output_iterator.cpp> 
 +#include <vector> 
 +#include <iostream> 
 +#define SIZE 10 
 +using namespace std; 
 +  
 +int main() { 
 +  vector<int> ints; 
 +  for(int i=0; i<10; i++) 
 +    ints.push_back(SIZE-i); 
 + 
   for(vector<int>::iterator it=ints.begin(); it!=ints.end(); it++) {   for(vector<int>::iterator it=ints.begin(); it!=ints.end(); it++) {
     *it += 10;                         // we modify container here     *it += 10;                         // we modify container here
     cout << *it << " ";     cout << *it << " ";
   }   }
 +  cout << endl;
      
   for(vector<int>::const_iterator it=ints.cbegin(); it!=ints.cend(); it++) {   for(vector<int>::const_iterator it=ints.cbegin(); it!=ints.cend(); it++) {
Line 27: Line 50:
     cout << *it << " ";     cout << *it << " ";
   }   }
 +}
 </code> </code>
   * **Bidirectional Iterator:** Πρόκειται για iterators που εκτός των πράξεων ''++it'', ''it++'' υποστηρίζουν και τις πράξεις ''%%--%%it'', ''it%%--%%''. //Bidirectional Iterators// είναι όλοι οι //iterators// με εξαίρεση εκείνούς που ανήκουν σε //Unordered Associative Containers// και οι //iterators// του //container forward_list// (απλά συνδεδεμένη λίστα). Παραδείγματα:   * **Bidirectional Iterator:** Πρόκειται για iterators που εκτός των πράξεων ''++it'', ''it++'' υποστηρίζουν και τις πράξεις ''%%--%%it'', ''it%%--%%''. //Bidirectional Iterators// είναι όλοι οι //iterators// με εξαίρεση εκείνούς που ανήκουν σε //Unordered Associative Containers// και οι //iterators// του //container forward_list// (απλά συνδεδεμένη λίστα). Παραδείγματα:
Line 230: Line 254:
  
 Εάν θέλουμε να υπολογίσουμε την απόσταση μεταξύ δύο //iterators// παρέχεται η συνάρτηση [[http://www.cplusplus.com/reference/iterator/distance/|distance]] η οποία υπολογίζει την απόσταση από το πρώτο όρισμα (//first//) έως το δεύτερο όρισμα (//last//) μετακινώντας τον δείκτη από //first// έως //last// με χρήση του τελεστή ''++''. Η συνάρτηση υποθέτει ότι το //first// βρίσκεται πριν από το //last//. Εάν θέλουμε να υπολογίσουμε την απόσταση μεταξύ δύο //iterators// παρέχεται η συνάρτηση [[http://www.cplusplus.com/reference/iterator/distance/|distance]] η οποία υπολογίζει την απόσταση από το πρώτο όρισμα (//first//) έως το δεύτερο όρισμα (//last//) μετακινώντας τον δείκτη από //first// έως //last// με χρήση του τελεστή ''++''. Η συνάρτηση υποθέτει ότι το //first// βρίσκεται πριν από το //last//.
 +
 +Δείτε το παρακάτω παράδειγμα χρήσης των συγκεκριμένων συναρτήσεων 
 +
 +<code cpp advance_distance.cpp>
 +#include <iostream>     // std::cout
 +#include <iterator>     // std::advance
 +#include <list>         // std::list
 +
 +int main () {
 +  std::list<int> mylist;
 +  for (int i=0; i<10; i++) mylist.push_back (i*10);
 +  
 +  for(std::list<int>::const_iterator it = mylist.cbegin(); it!=mylist.cend(); ++it)
 +    std::cout << *it << " ";
 +  std::cout << std::endl;
 +
 +  std::list<int>::iterator it = mylist.begin();
 +  
 +  std::advance (it,5);
 +
 +  std::cout << "The sixth element in mylist is: " << *it << '\n';
 +  
 +  std::list<int>::iterator it1 = mylist.begin();
 +  std::advance(it1,2);
 +  
 +  std::list<int>::iterator it2 = mylist.end();
 +  std::advance(it2,-2);
 +  
 +  std::cout << "Distance between it1 and it2 is: " << distance(it1, it2) << std::endl;
 +
 +  return 0;
 +}
 +</code>
  
 ==== Κοινές συναρτήσεις για όλους τους containers για την επιστροφή των θέσεων αρχής και τέλους ==== ==== Κοινές συναρτήσεις για όλους τους containers για την επιστροφή των θέσεων αρχής και τέλους ====
cpp/stl/iterators.1685376020.txt.gz · Last modified: 2023/05/29 16:00 by gthanos