Tutorial 6.2 - Set

Obiective

Ne dorim:

  • să implementăm o structură de tip Set folosind std::list

SetList.h

Vom crea o clasă SetList cu următoarele funcționalități:

  • empty - true dacă set-ul este gol
  • size - dimensiunea set-ului
  • add - adaugă un element în set dacă nu este deja adăugat (returnează true dacă elementul va fi adăugat)
  • remove - elimină un element din set dacă există (returnează true dacă elementul va fi eliminat)
  • print - afișează lista
#include <iostream>
#include <list>
 
template <class T>
class SetList {
        std::list <T> l;
public:
        bool empty() { return l.empty(); }
        int size() { return l.size(); }
 
        bool add(T other) {
                typename std::list<T>::iterator it;
                bool found = false;
 
                for(it = l.begin(); it != l.end(); ++it) {
                        if(*it == other) {
                                found = true;
                                break;
                        }
                }
 
                if(!found) {
                        l.push_back(other);
                }
 
                return !found;
        }
 
        bool remove(T other) {
                typename std::list <T>::iterator it;
                bool found = false;
 
                for(it = l.begin(); it != l.end(); ++it) {
                        if(*it == other) {
                                found = true;
                                break;
                        }
                }
 
                if(found) {
                    l.erase(it);
                }
 
                return found;
        }
 
        void print() {
                std::cout << "List: ";
                typename std::list <T>::iterator it;
 
                for(it = l.begin(); it != l.end(); ++it) {
                        std::cout << *it << " ";
                }
                std::cout << "\n";
        }
};

Pentru test, folosim următoarea sursă:

#include "SetList.h"

int main() {
        SetList <int> set;
        std::cout << set.add(1) << "\n";
        set.print();
        std::cout << set.add(2) << "\n";
        set.print();
        std::cout << set.add(2) << "\n";
        set.print();
        std::cout << set.remove(1) << "\n";
        set.print();
        std::cout << set.remove(1) << "\n";
        set.print();
        return 0;
}

Compilare și testare

g++ main.cpp -o main
./main 
1
List: 1 
1
List: 1 2 
0
List: 1 2 
1
List: 2 
0
List: 2      
sd-ca/2016/articole/tutorial-06-2.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