Περιέχοντες και επαναλήπτες στην STL
Η STL ορίζει μια σειρά από περιέχοντες (containers) όπως την ουρά, τη στοίβα,
την απεικόνιση και τον πίνακα.
Πάνω στους περιέχοντες αυτούς επιτρέπει την εκτέλεση αλγορίθμων,
όπως την εύρεση ενός στοιχείου, η ένωση δύο περιεχόντων, η
ταξινόμηση, κ.λπ.
Στην STL
ορίζονται οι παρακάτω πρότυποι (ως προς τα στοιχεία που περιέχουν)
περιέχοντες:
- list
- διπλά συνδεδεμένη λίστα
- queue
- ουρά
- deque
- ουρά με πρόσβαση και στις δύο άκρες
- map
- απεικόνιση (π.χ. από συμβολοσειρές σε ακέραιους)
- set
- απεικόνιση με μοναδικά στοιχεία στο πεδίο τιμών
- stack
- στοίβα
- vector
- πίνακας
Η πρόσβαση των στοιχείων ενός περιέχοντα από τους αλγορίθμους
γίνεται μέσω επαναληπτών (iterators).
Οι επαναλήπτες - ανάλογα με τη δομή των δεδομένων του περιέχοντα - μπορούν
να επιτρέπουν την παρακάτω ιεραρχία κινήσεων:
- Τυχαία προσπέλαση
- Κίνηση προς τις δύο κατευθύνσεις
- Κίνηση προς τα εμπρός, ή ανάποδη κίνηση
Επίσης, μπορούν να επιτρέπουν την παρακάτω ιεραρχία πρόσβασης στα δεδομένα
που δείχνουν:
- Είσοδο και έξοδο
- Μόνο είσοδο, ή μόνο έξοδο
Η κλάση των επαναληπτών ορίζεται στην επικεφαλίδα iterator.
Μερικές μέθοδοι που ορίζονται σε επαναλήπτες είναι οι παρακάτω:
- advance
- distance
- ==, !=, <, >, >=, <=
- +, -
- ++, --
Για κάθε περιέχοντα ορίζονται μέθοδοι όπως (στην περίπτωση της
διπλής ουράς):
- assign
- ανάθεση τιμής
- at
- αναφορά σε στοιχείο
- back
- το τελευταίο στοιχείο
- begin
- επαναλήπτης που δείχνει στην αρχή της δομής
- clear
- διαγραφή όλων των στοιχείων
- empty
- αληθές αν η δομή είναι άδεια
- end
- επαναλήπτης που δείχνει στο τέλος της δομής
- erase
- διαγραφή σειράς στοιχείων
- front
- το πρώτο στοιχείο
- insert
- προσθήκη στοιχείου
- operator[]
- πρόσβαση σε στοιχείο
- pop_back
- αφαίρεση στοιχείου από το τέλος
- pop_front
- αφαίρεση στοιχείου από την αρχή
- push_back
- προσθήκη στοιχείου στο τέλος
- push_front
- προσθήκη στοιχείου στην αρχή
- rbegin
- ανάστροφος επαναλήπτης που δείχνει στην αρχή της δομής
- rend
- ανάστροφος επαναλήπτης που δείχνει στο τέλος της δομής
- resize
- καθορισμός του αριθμού των στοιχείων
- size
- αριθμός των στοιχείων
- swap
- εναλλαγή δύο στοιχείων μεταξύ τους
Το παρακάτω παράδειγμα ορίζει μια διπλή ουρά ακεραίων, προσθέτει 5 στοιχεία
και τα τυπώνει:
#include <iostream>
#include <deque>
using namespace std;
typedef deque <int> INTDEQUE;
void main()
{
// Create A and fill it with elements 1,2,3,4 and 5
// using push_back function
INTDEQUE A;
A.push_back(1);
A.push_back(2);
A.push_back(3);
A.push_back(4);
A.push_back(5);
// Print the contents of A using iterator
// and functions begin() and end()
INTDEQUE::iterator pi;
for (pi = A.begin(); pi != A.end(); pi++)
cout << *pi << " ";
cout << "\n";
}