Wektor
Lekcja 5 z 23 w kursie C++ – Standardowa biblioteka szablonów w Coddy.
Vector w STL języka C++ to w zasadzie tablica o dynamicznym rozmiarze. Może automatycznie zmieniać swój rozmiar po wstawieniu lub usunięciu elementu. Elementy wektora są przechowywane w ciągłym obszarze pamięci, dzięki czemu można uzyskiwać do nich dostęp, modyfikować je i przechodzić przez nie za pomocą iteratorów.
W wektorach dane są wstawiane na końcu. Są wolniejszą strukturą danych niż tablica, ale wektor jest wystarczająco szybki, by używać go do rozwiązywania problemów, nawet w złożonych zawodach programistycznych.
Wektory w C++ są implementowane przez dołączenie ich na początku pliku za pomocą #include <vector>.
!Uwaga: W C++ istnieje niestandardowy plik nagłówkowy o nazwie bits/stdc++.h. Można go dołączyć na początku pliku C++ i używać dowolnych elementów biblioteki standardowej bez konieczności ich dołączania. (#include <bits/stdc++.h)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// Kod...
return 0;
}#include <bits/stdc++.h>
using namespace std;
int main()
{
// Kod...
return 0;
}Jak więc utworzyć, zainicjalizować i używać wektora? Używamy słowa kluczowego vector<>. Wewnątrz <> podajemy typ zmiennej, czyli typ danych elementów, które zamierzamy przechowywać w wektorze. Jeśli chcemy zadeklarować wektor, w którym będą przechowywane liczby całkowite, używamy vector<int>.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers[0];
return 0;
}Output:
1Jak widać powyżej, wektory zachowują się dokładnie tak jak tablice. Zadeklarowaliśmy wektor typu int o nazwie numbers i zainicjalizowaliśmy go kilkoma wartościami. Następnie, używając nawiasów kwadratowych — [], wypisaliśmy pierwszy element, czyli element o indeksie 0.
Wstawiamy elementy na końcu wektora za pomocą funkcji push_back(). Metoda push_back() dodaje nowy element za ostatnim elementem wektora.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers[2] << endl;
numbers.push_back(10);
cout << numbers[3];
return 0;
}Output:
3
10Jak widzisz, używamy metody, podając nazwę wektora i kropkę — .. Po użyciu metody push_back() rozmiar wektora zwiększa się o jeden.
Mamy też metodę size(), której możemy użyć, aby uzyskać liczbę elementów w wektorze.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> numbers = {1, 2, 3};
cout << numbers.size();
return 0;
}Output:
3Często używamy metody size(), gdy nie znamy liczby elementów w wektorze, ale chcemy przejść przez jego elementy, dlatego w warunku pętli używamy vector.size().
Struktura danych vector ma wiele funkcjonalności i możliwości, na przykład funkcja resize(n) zmienia rozmiar wektora na n i wiele innych. Wrócimy do nich, gdy będziemy uczyć się o algorytmach i funkcjach. Na razie zapamiętaj, że wektory to tablice o dynamicznym rozmiarze, jak je deklarować oraz że nowe elementy wstawiamy za pomocą metody push_back().
Przykład: Poniżej znajduje się przykładowy program, w którym użytkownik będzie wpisywać liczby, dopóki nie poda -1. Użyjemy pętli i wektora do ich przechowywania, ponieważ nie wiemy, ile będzie elementów.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x;
vector<int> numbers;
while(x != -1)
{
cin >> x;
numbers.push_back(x);
}
return 0;
}W każdej lekcji otrzymasz tabelę metod dostępnych dla danej struktury danych w C++.
Metody wektora
| Metoda | Działanie |
| push_back() | Dodaje nowy element na końcu wektora |
| pop_back() | Usuwa ostatni element wektora |
| swap() | Zamienia miejscami wskazane elementy |
| front() | Zwraca referencję do pierwszego elementu |
| back() | Zwraca referencję do ostatniego elementu |
| empty() | Określa, czy wektor jest pusty |
| clear() | Usuwa wszystkie elementy z wektora |
| resize() | Zmienia rozmiar wektora |
| size() | Zwraca liczbę elementów w wektorze |
| insert() | Wstawia wskazany element na określonej pozycji |
Wyzwanie
ŁatwyLiczby dodatnie są wprowadzane, dopóki nie zostanie wprowadzona liczba -1. Następnie ostatnia podana liczba naturalna N jest liczbą kontekstową. Wypisz każdy element, przez który N dzieli się bez reszty.
Na przykład:
Input
5
10
15
-1
100Output
5
10ponieważ 100 dzieli się przez 5 i 10, ale nie przez 15
Input
2
4
6
8
-1
12Output
2
4
6Ponieważ 12 dzieli się przez 2, 4 i 6, ale nie przez 8
Spróbuj swoich sił
#include <vector>
#include <iostream>
using namespace std;
int main()
{
// Enter your code here
return 0;
}Wszystkie lekcje w sekcji C++ – Standardowa biblioteka szablonów
Poćwicz samodzielnie: Kompilator C++ online