Tutorial 6.1 - std::list

Obiective

Ne dorim:

  • să arătăm funcționalitățile unei liste
  • să folosim algoritmul InsertionSort pentru a sorta o listă

std::list

În acest tutorial vom folosi clasa std::list din STL. Pentru mai multe detalii, vă sugerăm să citiți documentația oficială (list).

Atenție! Este nevoie să includem biblioteca list.

#include <list> // std::list

Clasa std::list oferă toate funcționalitățile uzuale pentru o listă. Menționăm că nu există o implementare unică, astfel încât apar mici diferențe față de implementările sugerate în articol:

  • accesarea elementelor se poate face prin iterator
  • metodele front si back vor întoarce capetele listei
  • metodele addFirst si addLast se vor numi push_front si push_back
  • metodele removeFirst si removeLast se vor numi pop_front si pop_back
  • metoda isEmpty se va numi empty
  • metoda size care returnează numărul de elemente din stivă

În continuare vom prezenta un exemplu inserare de elemente într-o listă.

int main() {
    std::list <int> l;
    std::list <int>::iterator it;
    int i;
 
    for(i = 0; i < 5; ++i) {
        l.push_back(i);
    }
 
    for(i = 5; i < 10; ++i) {
        l.push_front(i);
    }
 
    for(it = l.begin(); it != l.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << "\n";
 
    return 0;
}

Având la dispoziție o listă cu elemente, putem sa extragem element cu element și să le prelucrăm (afișare), iar apoi să le eliminăm.

l.pop_front();
l.pop_front();
 
for(it = l.begin(); it != l.end(); ++it) {
    std::cout << *it << " ";
}
std::cout << "\n";

Compilare și testare

g++ main.cpp -o main

Exemplu:

./main
9 8 7 6 5 0 1 2 3 4 
7 6 5 0 1 2 3 4 

InsertionSort

La fiecare element ce trebuie adăugat în lista sortată se va itera de la începutul listei și se va găsi poziția în care trebuie adăugat.

std::cin >> n;
for(i = 0; i < n; ++i) {
    std::cin >> x;
    if(l.empty()) {
        l.push_back(x);
    } else {
        for(it = l.begin(); it != l.end(); ++it) {
            if(*it > x) break;
        }
 
        if(it == l.begin()) {
            l.push_front(x);
        } else if(it == l.end()) {
            l.push_back(x);
        } else {
            l.insert(it, 1, x);
        }
    }
 
    for(it = l.begin(); it != l.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << "\n";
}

Compilare și testare

g++ main.cpp -o main
./main
10
5
5 
1
1 5 
17
1 5 17 
2
1 2 5 17 
10
1 2 5 10 17 
-2
-2 1 2 5 10 17 
21
-2 1 2 5 10 17 21 
3
-2 1 2 3 5 10 17 21 
1
-2 1 1 2 3 5 10 17 21 
4
-2 1 1 2 3 4 5 10 17 21 
sd-ca/2016/articole/tutorial-06-1.txt · Last modified: 2017/02/04 22:59 by alexandru.olteanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0