Wprowadzenie.
Kolejka o dwóch końcach “deque” to kontener sekwencyjny. Kontener ten charakteryzuje się dynamiczną zmianą rozmiaru. Każdy element wektora ma określoną pozycję, która jest nadawana w momencie wstawienia kolejnego elementu do kontenera. W odróżnieniu od wektora, deque ma możliwość wstawiania elementu zarówno na końcu jak i początku kontenera.
Zakres artykułu.
- Właściwości kontenera
- Program w C++
- Plik Makefile
- Testy
Właściwości kontenera
- Możliwość relatywnie szybkiego dynamicznego dodawania, usuwania elementów na końcu jak i początku kontenera;
- Kolejne elementy są przechowane w pamięci obok siebie, dzięki czemu prosty jest dostęp do grupy elementów przy zastosowaniu wskaźników;
- Możliwość uzyskania dostępu bezpośrednio do każdego elementu.
Program w C++
Kod programu, który pozwoli na przetestowanie kontenera “Deque” zapisałem w pliku main.cpp i wygląda następująco.
#include <iostream> #include <deque> #define LICZBA_ELEMENTOW_BACK 5 #define LICZBA_ELEMENTOW_FRONT 7 using namespace std; int main() { int i = 0; deque<int> mojKontener; int wstawionaLiczbaElementow = 0; // Wstawianie elementów na końcu kontenera for(i=0; i<LICZBA_ELEMENTOW_BACK; i++) { mojKontener.push_back(i); } // Wstawianie elementów na początku kontenera for(i=0; i<LICZBA_ELEMENTOW_FRONT; i++) { mojKontener.push_front(i); } wstawionaLiczbaElementow = mojKontener.size(); // Wyświetlenie kontenera for(i=0; i<wstawionaLiczbaElementow; i++) { cout << mojKontener[i] << 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:
6
5
4
3
2
1
0
0
1
2
3
4