Περιέχοντες και επαναλήπτες στην STL

Η STL ορίζει μια σειρά από περιέχοντες (containers) όπως την ουρά, τη στοίβα, την απεικόνιση και τον πίνακα. Πάνω στους περιέχοντες αυτούς επιτρέπει την εκτέλεση αλγορίθμων, όπως την εύρεση ενός στοιχείου, η ένωση δύο περιεχόντων, η ταξινόμηση, κ.λπ.

Στην STL ορίζονται οι παρακάτω πρότυποι (ως προς τα στοιχεία που περιέχουν) περιέχοντες:

list
διπλά συνδεδεμένη λίστα
queue
ουρά
deque
ουρά με πρόσβαση και στις δύο άκρες
map
απεικόνιση (π.χ. από συμβολοσειρές σε ακέραιους)
set
απεικόνιση με μοναδικά στοιχεία στο πεδίο τιμών
stack
στοίβα
vector
πίνακας
Η πρόσβαση των στοιχείων ενός περιέχοντα από τους αλγορίθμους γίνεται μέσω επαναληπτών (iterators). Οι επαναλήπτες - ανάλογα με τη δομή των δεδομένων του περιέχοντα - μπορούν να επιτρέπουν την παρακάτω ιεραρχία κινήσεων: Επίσης, μπορούν να επιτρέπουν την παρακάτω ιεραρχία πρόσβασης στα δεδομένα που δείχνουν: Η κλάση των επαναληπτών ορίζεται στην επικεφαλίδα iterator. Μερικές μέθοδοι που ορίζονται σε επαναλήπτες είναι οι παρακάτω: Για κάθε περιέχοντα ορίζονται μέθοδοι όπως (στην περίπτωση της διπλής ουράς):
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";
}