Menu
Coddy logo textTech

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:
1

Jak 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
10

Jak 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:
3

Czę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

MetodaDział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
challenge icon

Wyzwanie

Łatwy

Liczby 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
100
Output
5
10

ponieważ 100 dzieli się przez 5 i 10, ale nie przez 15

 

Input
2
4
6
8
-1
12
Output
2
4
6

Ponieważ 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