From MJanik
(Difference between revisions)
|
|
| Line 1: |
Line 1: |
| - | [http://www.if.pw.edu.pl/~majanik/data/JP/2012/makefile.pdf Makefile - instrukcja] | + | |
| | + | |
| | + | W ramach przygotowania do zadania możesz: |
| | + | <li> zapoznać się z plikiem: [http://www.if.pw.edu.pl/~majanik/data/JP/2012/makefile.pdf Makefile - instrukcja] i przygotować Makefile dla ostatnio pisanego programu |
| | + | <li> napisz klasę MojeLiczby, która zawiera pole stl::vector<int> liczby oraz metody: |
| | + | * void generuj(n) - generuje n liczb z zakresu 0-99 i wstawia je na koniec vecotr'a |
| | + | * void print() - wypisuje wszystkie liczby zapisane w wektorze |
| | + | * void clear() - usuwa wszyskie liczby dotychczas zapisane w wektorze |
| | + | <li> zmodyfikuj funkcję main w taki sposób, by przyjmowała jako argument ilość liczb które instancja (obiekt) klasy MojeLiczby ma wygenerować i wypisać na ekran. |
| | + | Przykład wywołania programu: ./programLiczby 10 |
| | + | Przykładowy efekt: 4 39 58 67 85 2 33 44 7 83 |
| | | | |
| | <hr /> | | <hr /> |
Revision as of 13:30, 19 November 2025
W ramach przygotowania do zadania możesz:
zapoznać się z plikiem: Makefile - instrukcja i przygotować Makefile dla ostatnio pisanego programu
napisz klasę MojeLiczby, która zawiera pole stl::vector<int> liczby oraz metody:
* void generuj(n) - generuje n liczb z zakresu 0-99 i wstawia je na koniec vecotr'a
* void print() - wypisuje wszystkie liczby zapisane w wektorze
* void clear() - usuwa wszyskie liczby dotychczas zapisane w wektorze
zmodyfikuj funkcję main w taki sposób, by przyjmowała jako argument ilość liczb które instancja (obiekt) klasy MojeLiczby ma wygenerować i wypisać na ekran.
Przykład wywołania programu: ./programLiczby 10
Przykładowy efekt: 4 39 58 67 85 2 33 44 7 83
Makefile
Czym jest Makefile?
Makefile to plik konfiguracyjny używany przez narzędzie make do automatyzacji procesu kompilacji.
Pozwala definiować zasady budowania programu: które pliki należy skompilować, w jakiej kolejności i z jakimi poleceniami.
Po co stosować Makefile?
* Automatyzuje budowę programu (kompilacja, linkowanie, czyszczenie plików pośrednich).
* Skraca czas — kompilowane są tylko pliki, które zostały zmodyfikowane.
* Upraszcza pracę w dużych projektach z wieloma plikami źródłowymi.
* Pozwala definiować własne cele (targets), np. make clean.
Najczęstsze elementy Makefile
* *Cel (target)* – nazwa zadania, np. main.
* *Reguła (rule)* – określa zależności i polecenia, które mają zostać wykonane.
* *Zależności (dependencies)* – pliki, od których zależy dany cel.
* *Polecenia (commands)* – komendy wykonywane przez make (musi je poprzedzać tabulator!).
Przykładowy Makefile
<verbatim>
CXX=g++
CXXFLAGS=-Wall -O2
main: main.o utils.o
$(CXX) $(CXXFLAGS) main.o utils.o -o main
main.o: main.cpp utils.hpp
utils.o: utils.cpp utils.hpp
clean:
rm -f *.o main
</verbatim>
Kiedy używać Makefile?
* Gdy projekt składa się z więcej niż jednego pliku źródłowego.
* Gdy chcesz mieć powtarzalny i automatyczny proces budowania.
* Gdy potrzebujesz wygodnego sposobu zarządzania kompilacją i plikami pośrednimi.
Podsumowanie
Makefile jest prostym, ale bardzo skutecznym narzędziem umożliwiającym automatyzację kompilacji w projektach C/C++.
Ułatwia zarządzanie kodem, oszczędza czas i pozwala utrzymać porządek w projekcie.
Kontener STL std::vector
Czym jest std::vector?
std::vector to sekwencyjny kontener z biblioteki STL, który przechowuje elementy w sposób ciągły w pamięci.
Umożliwia dynamiczne powiększanie i zmniejszanie rozmiaru podczas działania programu.
Dostarcza szybki dostęp do elementów przez indeks (operacja O(1)) oraz efektywne dodawanie na końcu (amortyzowane O(1)).
Najważniejsze cechy
* Elementy są przechowywane w kolejności dodania.
* Rozmiar może się zmieniać w trakcie działania programu.
* Zapewnia dostęp za pomocą operatora [] i metody at().
* Posiada bogaty zestaw metod do modyfikowania zawartości.
Najczęściej używane metody
* push_back(x) – dodaje element na końcu.
* pop_back() – usuwa ostatni element.
* size() – zwraca liczbę elementów.
* empty() – sprawdza, czy wektor jest pusty.
* clear() – usuwa wszystkie elementy.
* begin(), end() – iteratory pozwalające przechodzić po wektorze.
Przykład użycia
#include <vector>
#include <iostream>
int main() {
std::vector<int> liczby;
liczby.push_back(10);
liczby.push_back(20);
liczby.push_back(30);
for (size_t i = 0; i < liczby.size(); i++) {
std::cout << liczby[i] << std::endl;
}
return 0;
}
Kiedy używać std::vector?
* Gdy potrzebujesz dynamicznej tablicy.
* Gdy kluczowy jest szybki dostęp do elementów.
* Gdy dane często dodajesz na końcu kontenera.
* Gdy zależy Ci na prostocie i efektywności.
Zalety
* Bardzo szybki dostęp do elementów.
* Kompaktowe przechowywanie danych w pamięci.
* Prosta obsługa i szerokie wsparcie w STL.
Wady
* Wstawianie elementów w środku jest kosztowne (przesuwanie danych).
* Przealokowanie podczas powiększania może czasem kosztować więcej czasu.
Podsumowanie
std::vector to najczęściej używany kontener STL dzięki swojej wydajności, elastyczności i intuicyjności.
W większości przypadków stanowi zalecaną strukturę do przechowywania sekwencji danych w C++.