Skip to content

Commit

Permalink
Boilerplate.
Browse files Browse the repository at this point in the history
  • Loading branch information
xehivs committed Mar 31, 2016
1 parent a8d0af5 commit ab1f534
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 24 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
all:
g++ *.cpp -o lab3
./lab3 10
./lab3 3
31 changes: 21 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,28 @@
#Lab 3 - Kontenery
#Lab 3 - Kontenery i adaptery

##Czym są adaptery?
Adapter jest jednym z wzorców projektowych. Zadaniem adaptera jest przekształcanie interfejsów różnych klas w taki, który jest oczekiwany przez użytkownika. Innymi słowy adapter daje nam metody, za pomocą których możemy np. pobierać i zapisywać dane w określony sposób, ale sposób organizacji danych w adapterze jest nieznany. Dzięki adapterowi możemy zmienić klasę zarządzającą danymi nie zmieniając działania całej aplikacji.
## Zadania

### Tablica
### Zadanie na 3
Wewnątrz funkcji `containers()`:

### Stos
- Umieść **Słowian** w losowej kolejności w wektorze,
- Wykorzystując iterator i funkcję `description()`, wyświetl wszystkich **Słowian** w wektorze,
- Przenieś wszystkich **Słowian** z wektoru do zbioru,
- Stwórz słownik tworzący pary **Słowian**, z tych znajdujących się w zbiorze, czyszcząc zbiór,
- Wykorzystując iterator, wyświetl wszystkie pary **Słowian**.

### Kolejka
### Zadanie na 4
Wewnątrz funkcji `adapters()`:

### Słownik
- Umieść **Słowian** w kolejce.
- Przenieś **Słowian** z kolejki do stosu.
- Wyświetl **Słowian** zdejmowanych ze stosu.

### Zbiór
### Zadanie na 5
Uzupełnij klasę `Slav` o metodę rozpoznającą płeć Słowianina/Słowianki, zwracając ją jako `enum`. Stwórz słownik (`map`) zwracający tablicę (`vector`) wskaźników na wszystkich mężczyzn, gdy podamy mu klucz odpowiadający mężczyźnie i tablicę wszystkich kobiet, gdy podamy mu klucz odpowiadający kobiecie.

## Zadanie na 5
Uzupełnij klasę `Slav` o metodę rozpoznającą płeć Słowianina/Słowianki, zwracając ją jako `enum`. Stwórz słownik (`map`) zwracający tablicę (`vector`) wskaźników na wszystkich mężczyzn, gdy podamy mu klucz odpowiadający mężczyźnie i tablicę wszystkich kobiet, gdy podamy mu klucz odpowiadający kobiecie.
### Zadanie na 5.5
Wyjaśnij, co dzieje się w `21` linijce pliku `Slav.cpp`. Jak nazywa się ten proces?

## Dokumentacja
- [Dokumentacja biblioteki STL](http://www.cplusplus.com/reference/stl/)
14 changes: 8 additions & 6 deletions Slav.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,26 @@
using namespace std;

vector <string> Slav::names;
int Slav::_counter = 0;

void Slav::init()
{
srand(time(NULL));
ifstream file("names.dat");
copy(istream_iterator<string>(file),
istream_iterator<string>(),
back_inserter(names));
istream_iterator<string>(),
back_inserter(names));
file.close();
}

Slav::Slav()
{
static int ret = (init(), 1); // Leniwa inicjalizacja
_name = names[rand() % names.size()];
static int amountOfNames = (init(), names.size());
_name = names[rand() % amountOfNames];
_id = _counter++;
}

string Slav::name()
string Slav::description()
{
return _name;
return string(" ") + _name + " [" + to_string(_id) + "]";
}
15 changes: 13 additions & 2 deletions Slav.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,20 @@ class Slav
{
private:
static void init();

static std::vector <string> names;
static int _counter;

string _name;
int _id;

public:
Slav();
string name();
};

static int counter() { return _counter; }

string name() { return _name; }
int id() { return _id; }

string description();
};
96 changes: 91 additions & 5 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,105 @@
#include <map> // Słownik

// Adaptery
#include <stack> // Stos
#include <queue> // Kolejka
#include <stack> // Stos

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#include "Slav.h"

#define REPORT_ADAPTERS showMeAdapterSizes(queueOfSlavs,stackOfSlavs)
#define REPORT_CONTAINERS showMeContainerSizes(vectorOfSlavs,setOfSlavs,mapOfSlavs)

using namespace std;

void showMeContainerSizes(vector <Slav *>, set <Slav *>, map <Slav *, Slav*>);
void showMeAdapterSizes(queue <Slav *>, stack <Slav *>);

void containers(Slav *, int);
void adapters(Slav *, int);

int main(int argc, char const *argv[])
{
int n = atoi(argv[1]);
int n = 2 * atoi(argv[1]);
Slav *slavs = new Slav[n];
cout << "# Generated Slavs" << endl;
for (int i = 0; i < n; ++i)
printf("[%i] %s\n", i, slavs[i].name().c_str());
}
cout << slavs[i].description() << endl;

containers(slavs, n);
adapters(slavs, n);

delete [] slavs;
}

void containers(Slav * slavs, int n)
{
vector <Slav *> vectorOfSlavs;
set <Slav *> setOfSlavs;
map <Slav *, Slav *> mapOfSlavs;

printf("# Containers\n");
REPORT_CONTAINERS;
printf("## vector\n");

// Umieść Słowian w losowej kolejności w wektorze.

// Wykorzystując iterator i funkcję description(), wyświetl wszystkich Słowian w wektorze

REPORT_CONTAINERS;
printf("## set\n");

// Przenieś wszystkich Słowian z wektoru do zbioru.

REPORT_CONTAINERS;
printf("## map\n");

// Stwórz słownik tworzący pary Słowian, z tych znajdujących się w zbiorze, czyszcząc zbiór

// Wykorzystując iterator, wyświetl wszystkie pary Słowian

REPORT_CONTAINERS;
}

void adapters(Slav * slavs, int n)
{
queue <Slav *> queueOfSlavs;
stack <Slav *> stackOfSlavs;

printf("# Adapters\n");
REPORT_ADAPTERS;
printf("## queue\n");

// Umieść Słowian w kolejce.

REPORT_ADAPTERS;

printf("## stack\n");
// Przenieś Słowian z kolejki do stosu.

REPORT_ADAPTERS;

// Wyświetl Słowian zdejmowanych ze stosu.

REPORT_ADAPTERS;
}

void showMeContainerSizes(vector <Slav *> vector, set <Slav *> set, map <Slav *, Slav*> map)
{
printf("[vector_size = %lu, set_size = %lu, map_size = %lu, existingSlavs = %i]\n",
vector.size(),
set.size(),
map.size(),
Slav::counter());
}

void showMeAdapterSizes(queue <Slav *> queue, stack <Slav *> stack)
{
printf("[queue_size = %lu, stack_size = %lu, existingSlavs = %i]\n",
queue.size(),
stack.size(),
Slav::counter());

}

0 comments on commit ab1f534

Please sign in to comment.