INF3105 —­­­­­ Structures de données et algorithmes
Automne 2016

Laboratoire 10 : Conteneurs de la bibliothèque standard de C++ et Héritage en C++


Lectures préalables

Objectifs

* «Standard Template Library» ou «STL» est le nom de la bibliothèque originale. Les conteneurs de la STL ont depuis été standardisés dans la «bibliothèque standard de C++».

Équivalences

Les structures de données étudiées jusqu'à présent ont des implémentations équivalentes dans la bibliothèque standard de C++.

Lib3105++
Bibliothèque standard de C++
Tableau
std::vector
Pile
std::stack
File
std::queue
Liste
std::forward_list  (simplement chaînée)
std::list  (doublement chaînée)
ArbreAVL
std::set  (arbre rouge-noir)
ArbreMap
std::map

Tâches


1. Expérimentations simples

Transcrivez, compilez et expérimentez les programmes suivants.

lab10a.cpp

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(){
    vector<string> tab;
    tab.push_back("un"); // tab.ajouter("un");
    tab.push_back("deux");
    tab.push_back("trois");
    tab.push_back("quatre");
    tab.push_back("cinq");
    
    vector<string> tab2 = tab;
    for(vector<string>::iterator iter=tab2.begin();iter!=tab2.end();++iter)
       std::cout << *iter << std::endl;
}
Pour compiler et tester :
g++ lab10a.cpp
./a.out
ou
g++ -o lab10a lab10a.cpp
./lab10a

lab10b.cpp

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    vector<string> tab;
    tab.push_back("un"); // tab.ajouter("un");
    tab.push_back("deux");
    tab.push_back("trois");
    tab.push_back("quatre");
    tab.push_back("cinq");
    
    sort(tab.begin(), tab.end());
    for(vector<string>::iterator iter=tab.begin();iter!=tab.end();++iter)
       std::cout << *iter << std::endl;

    return 0;
}

lab10c.cpp

#include <iostream>
#include <string>
#include <set>
#include <algorithm>
using namespace std;

int main(){
    set<string> ensemble;
    ensemble.insert("un");
    ensemble.insert("deux");
    ensemble.insert("trois");
    ensemble.insert("quatre");
    ensemble.insert("cinq");
    
    for(set<string>::iterator iter=ensemble.begin();iter!=ensemble.end();++iter)
       std::cout << *iter << std::endl;

    return 0;
}

lab10d.cpp

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main(){
    map<int, string> dictionnaire;
    dictionnaire[1] = "un";
    dictionnaire[2] = "deux";
    dictionnaire[3] = "trois";
    dictionnaire[4] = "quatre";
    dictionnaire[5] = "cinq";
    
    cout << "dictionnaire[5]=" << dictionnaire[5] << std::endl;
    cout << "dictionnaire[1]=" << dictionnaire[1] << std::endl;
    cout << "dictionnaire[3]=" << dictionnaire[3] << std::endl;
    cout << "dictionnaire[2]=" << dictionnaire[2] << std::endl;
    cout << "dictionnaire[4]=" << dictionnaire[4] << std::endl;
    
    cout << "---" << std::endl;
    for(map<int, string>::iterator iter=dictionnaire.begin();iter!=dictionnaire.end();++iter){
        cout << "dictionnaire[" << iter->first << "]=" << iter->second << std::endl;
    }

    return 0;
}

2. Application simple

Écrivez un programme pour la question 4 de l'examen de mi-session 2012A. Basez-vous sur la réponse dans le solutionnaire, mais n'utilisez que des conteneurs de la STL.

3. Exercices sur l'héritage et les conteneurs en C++


/* Fin du lab10 */