-
Każdy kontener (w tym również tablica, czy wektor) posiada swój koniec i początek
- funkcja
begin()
zwraca początek kontenera - funkcja
end()
zwraca koniec kontenera - (w dużym uproszczeniu, temat rozszerzymy przy iteratorach)
- funkcja
Dzięki informacji o początku i końcu zakresu, możemy napisać pętlę iterującą po całym zakresie kontenera.
for (auto i = vec.begin(); i != vec.end(); ++i) {
auto element = *i;
// do sth on element
}
Taki zapis jest jednak niepotrzebnie złożony i mało czytelny.
Dlatego powstały range loop
, które umożliwiają łatwy zapis for (typ nazwa : kontener)
.
Kompilator może sam go wygenerować powyższy kod, jeśli użyjemy poniższego zapisu.
for (auto element : vec) {
// do sth on element
}
Napisz funkcję printVector
, która przyjmie jako argument std::vector<std::string>
i wypisze jego zawartość przy użyciu pętli for po kolekcji. Każdy element w nowej linii. Pobierz zadanie
#include <iostream>
#include <vector>
#include <string>
// Implement printVector
int main() {
std::vector<std::string> vec {
"Hello Coders School!",
"Welcome to the best C++ course ever",
"Man, this is crazy :)"
};
printVector(vec);
return 0;
}
Napisz funkcję concatenateVector
, która przyjmie jako argumenty 2 wektory a następnie zwróci jeden, który będzie zawierał naprzemiennie elementy z pierwszego i drugiego wektora. Np. dla poniższych vec1 i vec2 powinna zwrócić: {1, 11, 2, 12, 3, 13, 4, 14, 5, 15}
. Pobierz zadanie
#include <iostream>
#include <vector>
// Implement concatenateVector
int main() {
std::vector<int> vec1 {1, 2, 3, 4, 5};
std::vector<int> vec2 {11, 12, 13, 14, 15};
auto vec = concatenateVector(vec1, vec2);
for (const auto& el : vec) {
std::cout << el << " ";
}
return 0;
}