Skip to content

Latest commit

 

History

History
97 lines (70 loc) · 2.59 KB

03-range-for.md

File metadata and controls

97 lines (70 loc) · 2.59 KB

Podstawy C++

Pętla for po kolekcji

Coders School

Zakresy

  • 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)

Range based for loop

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
}

Zadanie

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;
}

Zadanie

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;
}