STL
La STL est la bibliothèque standard de C++. Les identifiants de la STL sont créés dans l’espace de nom std
.
Patron de classe array
Tableau de taille fixe
#include <array>
using namespace std;
int main(void) {
// type et taille
array<int, 4> ar = {1, 2, 3};
int c = ar[0]; // attention : pas d'exception
ar[3] = 6; // en cas d'erreur d'indice
ar.at(1); // exception "out_of_range" lancée en cas d'erreur d'indice
ar.size(); // renvoie la taille de l'array = 4 ici
return 0;
}
Patron de classe vector
Tableau de taille variable/dynamique
#include <vector>
using namespace std;
int main(void) {
vector<float> = vec{1., 2, 6, -3};
vec[0]; // accesseur, pas d'exception (comme array)
vec.at(1); // gère les erreurs d'indices (comme array)
vec.size(); // taille du vecteur, ici 4
vec.push_back(25); // ajoute une case à la, fin
vec.pop_back(); // retire et renvoie la valeur de la case de fin
vec.insert(3, 7.5); /* place 7.5 dans la case d'indice 3 et décale
* les valeurs des cases d'indice supérieurs de 1 */
vec.insert(2, 3, 6.5); // 3 est le nombre de cases ajoutés
return 0;
}
Itérateur
On dit qu’une variable est un itérateur si on peut appliquer les opérateurs :
++it
/it++
--it
/it--
+it
it1 != it2
it1 == it2
Les classes array
et vector
peuvent produire des itérateurs avec les méthodes begin()
et end()
.
Exemple avec
array
(fonctionne pareil avecvector
)
#include <array>
using namespace std;
int main(void) {
array<int, 4> ar = {1, 2, 3, 4};
auto debut = ar.begin();
auto fin = ar.end();
for(; debut != fin; debut++) // affiche le contenu de l'array
cout << *debut << endl;
// On peut raccourci le code au dessus en faisant ceci :
for(int var = arr)
cout << var << endl;
return 0;
}
Patron de classe map
#include <string> // indépendant de map, juste pour l'exemple
#include <map>
using namespace std;
int main(void) {
map<int, string> dico = {
{0, "bonjour"}, // 0 -> "bonjour"
{1, "au revoir"} // 1 -> "au revoir"
};
dico[3] = string("trois"); // ajout : 3 -> "trois"
dico[1] = string("zero"); // donc désormais, 1 -> "zero"
map<string, int> retour;
retour["zero"] = 7; // "zero" -> 7
int c = retour["zero"]; // ici : c = 7
retour["un"] = 4; // "un" -> 4
retour["zero"] = 5; // modifications : "zero" -> 5
return 0;
}
- Pour fabriquer un objet
map
, il faut que l’on puisse comparer (égale ou différent) des objets. - Chaque opération élémentaire doit se faire en moins de \Theta(log(n)) où n est le nombre de clés dans l’objet.
- Il faut que les instances du types des clés puissent être comparés (< ou >)
- Les classes
vector
etmap
possèdent les méthodes :clear()
qui retire tous les élémentsempty()
qui renvoie 1 si aucun élément
Exemple
map<..., ...> m;
m[...] = ...;
m.clear();
// ici -> m.size() == 0;
// m.empty() == true; // la map est "vide"