1 : template <class T, class A = allocator<T>> class vector
2 : {
3 : public:
4 : // types
5 : typedef typename A::size_type size_type;
6 :
7 : // constructeurs
8 : explicit vector(const A& = A());
9 : explicit vector(size_type n, const T& val = T(),
10: const A& = A());
11: vector(const vector& v);
12:
13: }
typedef unsigned short int mot; mot x, y; //déclaration de 2 entiers courts non signés
typedef int tab[10]; tab mon_tableau; //déclaration d’un tableau de 10 entiers
//déclaration d’une classe A
class A
{
public:
/*on définit le type entierNS dans la classe A :
typedef unsigned int entierNS; //entierNS=unsigned int
};
//Déclaration d’un modèle
template <class T>
class mon_modele
{
typename T::entierNS i; // mon_modele suppose que le
// type générique T définit un type entierNS
};
mon_modele<A> ma_classe; // A peut servir à instancier une
//classe à partir du modèle de classe mon_modele
//un vector d’entiers de 100 éléments : vector<int> v_entiers(100); //un vector initialisé à partir d’un autre : vector<int> v_entiers;
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> v_entiers;
//v_entiers désigne le type vecteur d’entiers
//Prototype de la fonction d’affichage du conteneur :
template<class T, class A>
void AfficherVector(const vector<T, A>& v);
//Définition de la fonction d’affichage du conteneur :
template<class T, class A>
void AfficherVector(const vector<T, A>& v)
{
//max_size renvoie le nombre d’éléments du plus gros
// vector possible
cout << "max_size() = " << v.max_size();
//size() renvoie le nombre d’éléments du conteneur
cout << "tsize() = " << v.size();
//empty est un booléen égal à 1 (vrai) si le vecteur
// est vide
//si v.empty est vrai on affiche "vide" sinon "non vide"
cout << "t" << (v.empty()? "vide": "non vide");
/*capacity() renvoie le nombre total d’éléments pouvant être stockés dans la mémoire réservée*/
cout << "tCapacité = " << v.capacity();
cout << "nn";
}
//Fonction principale
void main()
{
cout << "On définit le vecteur d’entiers v_ent1 sans élémentn";
cout << "Voici les valeurs renvoyées par les fonctions membres: ;" << endl;
v_entiers v_ent1;
AfficherVector(v_ent1);
cout << "On définit le vecteur d’entiers v_ent2 n";
cout << "avec 3 éléments (v_ent2(3)), les valeurs deviennent:" << "n";
v_entiers v_ent2(3);
AfficherVector(v_ent2);
cout<<"On augmente la taille de v_ent2 à 5n";
cout << "Puis on ajoute la valeur 100 en finn";
v_ent2.resize(5, 100);
cout << "v_ent2 après resize(5, 100): n";
AfficherVector(v_ent2);
cout << "On réserve de la mémoire pour 10 élémentsn";
v_ent2.reserve(10);
cout << "v_ent2 après reserve(10):n";
AfficherVector(v_ent2);
}
On définit le vecteur d’entiers v_ent1 sans élément Voici les valeurs renvoyées par les fonctions membres: max_size()=1073741823 size()=0 vide Capacité=0 On définit le vecteur d’entiers v_ent2 avec 3 éléments (v_ent2(3)), les valeurs deviennent: max_size()=1073741823 size()=3 non vide Capacité=3 On augmente la taille de v_ent2 à 5 Puis on ajoute la valeur 100 en fin v_ent2 après resize(5, 100): max_size()=1073741823 size()=5 non vide Capacité=6 On réserve de la mémoire pour 10 éléments v_ent2 après reserve(10): max_size()=1073741823 size()=5 non vide Capacité=10
#include <iostream>
#include <vector> // définition du modèle de classe vector
#include <stdexcept> // pour l’exception out_of_rangeusing namespace std;
typedef vector<int> v_entiers;
//prototype de la fonction AfficherVector
template<class T, class A>
void AfficherVector(const vector<T, A>& v);
// Définition de la fonction AfficherVector
template<class T, class A>
void AfficherVector(const vector<T, A>& v)
{
// On parcourt le vecteur via l’opérateur []
cout << "nVoici les éléments:n";
for (vector<int>::size_type i=0; i < v.size(); ++i)
cout << v[i] << ", ";
//on affiche la valeur du premier élément :
cout << "nValeur de front() = " << v.front();
//on affiche la valeur du dernier élément :
cout << "tValeur de back() = " << v.back();
cout << "nn";
}
int main()
{
cout << "On crée le vecteur d’entiers v_ent(3)";
cout << " avec 3 éléments" << "n";
v_entiers v_ent(3);
cout << "On affecte une valeur à chaque élément via l’opérateur []" << endl;
for (vector<int>::size_type i = 0; i < v_ent.size(); ++i)
v_ent[i] = i*i ;
cout << "On tente d'affecter une valeur à un élément";
cout << " via la fonction at()" << endl;
try
{
v_ent.at((v_entiers::size_type)4) = 50;
// Erreur, hors de l’intervalle admis !
}
// accès hors de l’intervalle admis?
catch(out_of_range)
{
//si oui, on affiche le message :
cout << "Index hors de l’intervalle admis" << endl;
}
AfficherVector(v_ent);
// Augmente de 5 la taille de v_ent et ajoute 100 à la fin
v_ent.resize(5, 100);
cout << "On resize(5, 100) notre vecteur v_entn";
cout << "On essaie maintenant d'accéder au 4ième élément toujours";
cout << " via la fonction at()" << endl;
try
{
v_ent.at((v_entiers::size_type)4) = 50; //OK
}
cout << "Index hors de l’intervalle admis" << endl;
}
AfficherVector(v_ent);
}
On crée le vecteur d’entiers v_ent(3) avec 3 éléments On affecte une valeur à chaque élément via l’opérateur [] On tente d’affecter une valeur à un élément via la fonction at() Index hors de l’intervalle admis Voici les éléments: 0, 1, 4, Valeur de front()=0 Valeur de back()=4 On resize(5, 100) notre vecteur v_ent On essaie maintenant d’accéder au 4e élément toujours via la fonction at() Voici les éléments: 0, 1, 4, 100, 50, Valeur de front()=0 Valeur de back()=50
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> v_entiers;
template<class T, class A>
void AfficherVector(const vector<T, A>& v);
int main()
{
cout << "On définit un vecteur d’entiers de 3 élémentsn";
v_entiers v_ent(3);
cout << "On affecte une valeur à chaque élément de v_ent";
cout << " via un itérateur" << endl;
int i = 0;
v_entiers::iterator itor ;
for (itor = v_ent.begin(); itor != v_ent.end(); ++itor)
On définit un vecteur d’entiers de 3 éléments On affecte une valeur à chaque élément de v_ent via un itérateur Voici sa valeur: -572662307 Eléments affichés via un itérateur: 0, 1, 4, Eléments affichés via un itérateur inverse: 4, 1, 0,
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> v_entiers;
typedef vector<int>::iterator iter_vEnt;
template<class T, class A>
void AfficherVector(const vector<T, A>& v);
int main()
{
cout << "On définit un vecteur d’entiers avec 5 élémentsn";
v_entiers v_ent(5);
cout << "On affecte une valeur à chaque élément de v_ent";
cout << " via l'opérateur index []:n";
for (vector<int>::size_type i = 0; i < v_ent.size(); ++i)
v_ent[i] = 5 * i;
AfficherVector(v_ent);
cout << "On insère un élément avec insert(v_ent.begin()";
cout << " + 1, 50)nNotre conteneur devient:n";
iter_vEnt itor = v_ent.insert(v_ent.begin() + 1, 50);
AfficherVector(v_ent);
cout << "Voici l’élément courant : " << *itor << "nn";
cout << "On insère 5 éléments avec insert(v_ent.end(), 5, 30):n";
v_ent.insert(v_ent.end(), 5, 30);
AfficherVector(v_ent);
cout << "On supprime un élément dans VInt, on obtient:n";
v_ent.erase(v_ent.begin() + 3);
AfficherVector(v_ent);
cout << "On supprime 3 éléments dans VInt:n";
v_ent.erase(v_ent.begin() + 3, v_ent.begin() + 6);
AfficherVector(v_ent);
cout << "On insère plusieurs éléments à partir d’un autre vecteurn";
v_entiers v_ent2(2, 0);
cout << "Voici le vecteur cible v_ent2:n";
AfficherVector(v_ent2);
cout << "v_ent2 après insertion depuis v_entn";
v_ent2.insert(v_ent2.begin() + 1, v_ent.begin() + 1, v_ent.begin() + 3);
AfficherVector(v_ent2);
cout << "On ajoute un élément à la fin de v_ent2";
cout << "avec push_back()n";
v_ent2.push_back(100);
AfficherVector(v_ent2);
cout << "On supprime un élément à partir de la fin";
cout << " de v_ent2 avec pop_back()n";
v_ent2.pop_back();
AfficherVector(v_ent2);
cout << "On supprime v_ent2n";
v_ent2.clear();
AfficherVector(v_ent2);
}
//Définition de AfficherVector
template<class T, class A>
void AfficherVector(const vector<T, A>& v)
{
cout << "Taille= " << v.size() << "tCapacité= " << v.capacity() << "n";
// On parcourt le vecteur via l’opérateur []
cout << "éléments:t";
for (typename vector<T, A>::size_type i = 0; i < v.size(); ++i)
cout << v[i] << ", ";
cout << "nn";
}
On définit un vecteur d’entiers avec 5 éléments On affecte une valeur à chaque élément de v_ent via l’opérateur index []: Taille= 5 Capacité = 5 éléments: 0, 5, 10, 15, 20, On insère un élément avec insert(v_ent.begin()+ 1, 50) Notre conteneur devient: Taille= 6 Capacité = 10 éléments: 0, 50, 5, 10, 15, 20, Voici l’élément courant : 50 On insère 5 éléments avec insert(v_ent.end(), 5, 30): Taille= 11 Capacité = 12 éléments: 0, 50, 5, 10, 15, 20, 30, 30, 30, 30, 30, On supprime un élément dans VInt, on obtient: Taille= 10 Capacité = 12 éléments: 0, 50, 5, 15, 20, 30, 30, 30, 30, 30, On supprime 3 éléments dans VInt: Taille= 7 Capacité = 12 éléments: 0, 50, 5, 30, 30, 30, 30, On insère plusieurs éléments à partir d’un autre vecteur Voici le vecteur cible v_ent2: Taille= 2 Capacité = 2 éléments: 0, 0, v_ent2 après insertion depuis v_ent Taille= 4 Capacité = 4 éléments: 0, 50, 5, 0, On ajoute un élément à la fin de v_ent2 avec push_back() Taille= 5 Capacité = 8 éléments: 0, 50, 5, 0, 100, On supprime un élément à partir de la fin de v_ent2 avec pop_back() Taille= 4 Capacité = 8 éléments: 0, 50, 5, 0, On supprime v_ent2 Taille= 0 Capacité = 8 éléments:
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> v_entiers;
//prototype de la fonction d’affichage
template<class T, class A>
void AfficherVector(const vector<T, A>& v);
//Prototype de la fonction de comparaison
template<class T, class A>
void ComparerVectors(const vector<T, A>& v1, const vector<T, A>& v2);
int main()
{
cout << "On définit un vecteur d’entiers avec 5 élémentsn";
v_entiers v_ent1(5);
cout<<"On affecte une valeur à chaque élément via []n";
for (vector<int>::size_type i = 0; i < v_ent1.size(); ++i) {
v_ent1[i] = i * i;
}
AfficherVector(v_ent1);
cout << "On définit v_ent2 en recopiant les éléments ";
cout << "de v_ent1 nVoici v_ent2:" << endl;
v_entiers v_ent2 = v_ent1;
AfficherVector(v_ent2);
cout << "On compare v_ent et v_ent2" << endl;
ComparerVectors(v_ent1, v_ent2);
cout << "On ajoute un élément à la fin de v_ent2n";
v_ent2.push_back(100);
AfficherVector(v_ent2);
cout << "On compare v_ent et v_ent2 de nouveau" << endl;
ComparerVectors(v_ent1, v_ent2);
cout << "On échange v_ent et v_ent2 avec swap()" << endl;
v_ent1.swap(v_ent2);
cout << "v_ent1 devient:n";
AfficherVector(v_ent1);
cout << "v_ent2:n";
AfficherVector(v_ent2);
cout << "Dernière comparaison:" << endl;
ComparerVectors(v_ent1, v_ent2);
}
//Définition de la fonction d’affichage
template<class T, class A>
void AfficherVector(const vector<T, A>& v)
{
cout << "Taille= " << v.size() << "tCapacité = " << v.capacity() << "n";
// On affiche les éléments du vecteur
cout << "éléments:t";
for (typename vector<T,A>::size_type i = 0; i < v.size(); ++i)
cout << v[i] << ", ";
cout << "nn";
}
//Définition de la fonction de comparaison
template<class T, class A>
void ComparerVectors(const vector<T, A>& v1, const vector<T, A>& v2)
{
if (v1 == v2) {
cout << "v1 == v2";
}
else if (v1 < v2)
{
cout << "v1 < v2";
}
else
{
cout << "v1 > v2";
}
cout << "nn";
}
On définit un vecteur d’entiers avec 5 éléments On affecte une valeur à chaque élément via [] Taille= 5 Capacité = 5 éléments: 0, 1, 4, 9, 16, On définit v_ent2 en recopiant les éléments de v_ent1 Voici v_ent2: Taille= 5 Capacité = 5 éléments: 0, 1, 4, 9, 16, On compare v_ent et v_ent2 v1 == v2 On ajoute un élément à la fin de v_ent2 Taille= 6 Capacité = 10 éléments: 0, 1, 4, 9, 16, 100, On compare v_ent et v_ent2 de nouveau v1 < v2 On échange v_ent et v_ent2 avec swap() v_ent1 devient: Taille= 6 Capacité = 10 éléments: 0, 1, 4, 9, 16, 100, v_ent2: Taille= 5 Capacité = 5 éléments: 0, 1, 4, 9, 16, Dernière comparaison: v1 > v2
Combien cela coûte-t-il au total ? Quelles aides apportent l'état et les acteurs du marché pour alléger cette charge non choisie ? Tous les détails sur Commentçamarche.net.