Programowanie w C++ – RPi – STL – Set

Wprowadzenie.

Kontener „set” przeznaczony jest do przechowywania unikalnych elementów w określonej kolejności. W kontenerze set wartość elementu jest jednocześnie identyfikatorem. Wartości elementów tego kontenera nie mogą być modyfikowanie, natomiast jest możliwe wstawianie nowych lub usuwanie istniejących elementów. Wstawiając lub usuwając elementy kontenera, przeprowadzane jest automatyczne sortowanie całego zbioru.  

Zakres artykułu.

  • Właściwości kontenera
  • Program w C++
  • Plik Makefile
  • Testy

Właściwości kontenera

  • Kontener set jest typową implementacją binarnego drzewa wyszukiwań;
  • Wartości elementów w kontenerze set nie mogą się powtarzać;
  • Wartość elementu służy również jako identyfikator;
  • Elementy w kontenerze są uporządkowane w ściśle określonej kolejności;
  • Brak bezpośredniego dostępu do konkretnego elementu. Dostęp uzyskuje się przy pomocy iteratorów.

Program w C++

Kod programu, który pozwoli na przetestowanie kontenera „Set” zapisałem w pliku main.cpp i wygląda następująco.

#include <iostream>
#include <set>

using namespace std;

int main()
{
    int i = 0;
	set<int> mojKontenerSet;
	set<int>::iterator mojIterator;
	pair<set<int>::iterator, bool> para;

	// inicjalizacja wartości początkowych
	for(i=0; i<7; i++)
    {
        mojKontenerSet.insert(i);
    }

    // wyświetlenie wartości starowych
    for(mojIterator=mojKontenerSet.begin(); mojIterator!=mojKontenerSet.end(); mojIterator++)
    {
        cout << *mojIterator << " ";
    }
    cout << endl;

    para = mojKontenerSet.insert(5);

    if(para.second == false)
    {
        cout << "Element nie zostal wstawiony !!!" << endl;
    }
    else
    {
        cout << "Wstawienie elementu zakonczylo sie pomyslnie" << endl;
    }

    // wyswietlenie wartości po próbie wstawienia istniejącej już wartości
    for(mojIterator=mojKontenerSet.begin(); mojIterator!=mojKontenerSet.end(); mojIterator++)
    {
        cout << *mojIterator << " ";
    }
    cout << endl;

    para = mojKontenerSet.insert(23);

    if(para.second == false)
    {
        cout << "Element nie zostal wstawiony !!!" << endl;
    }
    else
    {
        cout << "Wstawienie elementu zakonczylo sie pomyslnie" << endl;
    }

    // wyswietlenie wartości po próbie wstawienia nowej unikalnej wartości
    for(mojIterator=mojKontenerSet.begin(); mojIterator!=mojKontenerSet.end(); mojIterator++)
    {
        cout << *mojIterator << " ";
    }
    cout << endl;

    return 0;
}

Plik Makefile

Plik Makefile wygląda następująco:

CC = g++
CFLAGS =
LIBS =

OBJ =\
        main.o

all: main

clean:
        rm -f *.o test

.c.o:
        $(CC) -c $(INCLUDES) $(CFLAGS) $<

main: $(OBJ)
        $(CC) $(OBJ) $(LIBS) -o test

Testy

Gdy już mamy wszystko przygotowane wówczas w konsoli wpisujemy polecenie:

$ make

Następnie uruchamiamy nasz program poleceniem:

$ ./test

Wynik jaki otrzymamy powinien wyglądać następująco:

0 1 2 3 4 5 6 
Element nie zostal wstawiony !!!
0 1 2 3 4 5 6 
Wstawienie elementu zakonczylo sie pomyslnie
0 1 2 3 4 5 6 23

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *