Vektor v C++ Standardní knihovna šablon (STL) s příkladem

⚡ Chytré shrnutí

Vektor v C++ je dynamické pole ze standardní knihovny šablon, které se automaticky mění velikost při přidávání nebo odebírání prvků a ukládá položky do souvislé paměti, aby k nim programátoři mohli přistupovat a procházet je pomocí iterátorů.

  • ???? Dynamické pole: A C++ Vektor se na rozdíl od statického pole s pevnou velikostí automaticky zvětšuje nebo zmenšuje.
  • 🧩 Záhlaví a syntaxe: Zahrňte hlavičku vektoru a poté deklarujte vektor název pro ukládání typovaných prvků.
  • 🧭 Iterátory: Funkce begin(), end(), cbegin() a cend() se pohybují mezi vektorovými prvky, jako jsou ukazatele.
  • 🛠️ Modifikátory: Funkce push_back(), insert(), pop_back(), erase() a clear() mění obsah vektoru.
  • 📐 Kapacita: Funkce size(), capacity(), max_size(), resize() a empty() hlásí nebo upravují úložiště.
  • 🤖 Asistence AI: GitHub Copilot a podobní AI asistenti vytvářejí vektorové operace z krátkého komentáře.

C++ Vektorový STL

Co je to C++ Vektor?

A C++ Vector je dynamické pole schopné automaticky měnit velikost. Ke změně velikosti dojde poté, co byl prvek přidán nebo odstraněn z vektoru. Skladování je řešeno automaticky kontejnerem. Prvky vektoru jsou uloženy v souvislém úložišti. To umožňuje C++ programátoři pro přístup a procházení vektorových prvků pomocí iterátorů.

Vložení nových dat do vektoru se provádí na jeho konci. To trvá diferenciální čas. Odebrání prvku z vektoru trvá konstantní čas. Důvodem je, že není třeba měnit velikost vektoru. Vložení nebo odstranění prvku na začátku vektoru trvá lineární čas.

Než začnete psát kód s vektory, je užitečné vědět, kdy jsou tím správným kontejnerem, po kterém sáhnout.

Kdy použít vektor?

A C++ vektor by měl být použit za následujících okolností:

  • Při práci s datovými prvky, které se neustále mění.
  • Pokud velikost dat není před začátkem známa, vektor nebude vyžadovat nastavení maximální velikosti kontejneru.

Jak inicializovat vektory v C++

Syntaxe vektorů v C++ je:

vector <data-type> name (items)

Jak je uvedeno výše, začneme klíčovým slovem vector.

  • Jedno datový typ je datový typ prvků, které mají být uloženy ve vektoru.
  • Jedno název je název vektoru nebo datových prvků.
  • Jedno položek označuje počet prvků pro vektorová data. Tento parametr je volitelný.

Jakmile vektor existuje, iterátory vám poskytují způsob pohybu mezi jeho prvky podobný ukazateli.

Iterátory

Účelem iterátorů je pomoci nám přistupovat k prvkům uloženým ve vektoru. Je to objekt, který funguje jako ukazatel. Zde jsou běžné iterátory podporované vektorem C++ vektory:

  • vektor::začátek(): dává iterátor, který ukazuje na první prvek vektoru.
  • vektor::konec(): poskytuje iterátor, který ukazuje na prvek vektoru za koncem.
  • vector::cbegin(): Je to stejné jako vector::begin(), ale nemá schopnost upravovat prvky.
  • vektor::cend(): Je to stejné jako vector::end(), ale nemůže upravovat prvky vektoru.

Následující příklad naplní vektor a poté jím projde pomocí proměnných i konstantních iterátorů.

Příklad 1

#include <iostream> 
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;

	for (int a = 1; a <= 5; a++)

		nums.push_back(a);

	cout << "Output from begin and end: ";

	for (auto a = nums.begin(); a != nums.end(); ++a)

		cout << *a << " ";

	cout << "\nOutput from cbegin and cend: ";

	for (auto a = nums.cbegin(); a != nums.cend(); ++a)

		cout << *a << " ";

	return 0;
}

Výstup:

C++ Výstup vektorových iterátorů Příklad 1

Zde je snímek obrazovky kódu:

C++ Příklad 1 kódu vektorových iterátorů

Code Vysvětlení:

  1. Zahrňte do našeho kódu hlavičkový soubor iostream. Umožní nám to číst a zapisovat do konzole.
  2. Zahrňte soubor vektorového záhlaví do našeho kódu. Umožní nám to pracovat s vektory C++.
  3. Zahrňte jmenný prostor std, abyste mohli používat jeho třídy a funkce bez jeho volání.
  4. Zavolejte funkci main(), do které má být přidána logika programu.
  5. { označuje začátek těla funkce main().
  6. Deklarujte vektor s názvem nums pro uložení sady celých čísel.
  7. Vytvořte smyčku for, která nám pomůže iterovat nad vektorem. Proměnná nám pomůže iterovat nad prvky vektoru, od 1. do 5. prvku.
  8. Zatlačte prvky do vektoru číslo zezadu. Pro každou iteraci to přidá aktuální hodnotu proměnné a do vektoru, což je 1 až 5.
  9. Vytiskněte nějaký text na konzoli.
  10. Použijte proměnnou iterátoru a k iteraci prvků vektoru nums od začátku po prvek za koncem. Všimněte si, že používáme iterátory vector::begin() a vector::end().
  11. Pro každou iteraci vytiskněte na konzole hodnoty, na které ukazuje proměnná iterátoru a.
  12. Vytiskněte nějaký text na konzoli. \n je znak nového řádku, přesouvá kurzor na nový řádek a tiskne se odtud.
  13. Pro iterování prvků vektoru nums od začátku do konce použijte proměnnou iterátor. Všimněte si, že používáme iterátory vector::cbegin() a vector::cend().
  14. Pro každou iteraci vytiskněte na konzole hodnoty, na které ukazuje proměnná iterátoru a.
  15. Funkce main by měla vrátit hodnotu, pokud program běží úspěšně.
  16. Konec těla funkce main().

Modifikátory

Modifikátory se používají pro změnu významu zadaného datového typu. Zde jsou běžné modifikátory v C++:

  • vector::push_back(): Tento modifikátor tlačí prvky zezadu.
  • vector::insert(): Pro vkládání nových položek do vektoru na určeném místě.
  • vector::pop_back(): Tento modifikátor odstraní vektorové prvky ze zadní strany.
  • vector::erase(): Používá se k odstranění řady prvků ze zadaného umístění.
  • vector::clear(): Odstraní všechny vektorové prvky.

Následující příklad aplikuje tyto modifikátory postupně, aby se vidělo, jak se vektor mění.

Příklad 2

#include <iostream>
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;
	
	nums.assign(5, 1);

	cout << "Vector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.push_back(2);
	int n = nums.size();
	cout << "\nLast element: " << nums[n - 1];

	nums.pop_back();

	cout << "\nVector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.insert(nums.begin(), 7);

	cout << "\nFirst element: " << nums[0];
	
	nums.clear();
	cout << "\nSize after clear(): " << nums.size();			
}

Výstup:

C++ Výstup modifikátorů vektorů z příkladu 2

Zde je snímek obrazovky kódu:

C++ Příklad 2 kódu modifikátorů vektorů

Code Vysvětlení:

  1. Chcete-li používat jeho funkce, zahrňte do našeho kódu hlavičkový soubor iostream.
  2. Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor vektorových hlaviček.
  3. Zahrňte jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
  4. Zavolejte funkci main(). Logika programu by měla být přidána do jeho těla.
  5. Začátek těla funkce main().
  6. Deklarujte vektor s názvem nums, abyste uložili nějaké celočíselné hodnoty.
  7. Uložte 5 prvků do vektorových čísel. Každý s hodnotou 1.
  8. Vytiskněte nějaký text na konzoli.
  9. Použijte proměnnou iterátoru a k iteraci prvků vektoru nums.
  10. Vytiskněte hodnoty čísel vektorů na konzole pro každou iteraci.
  11. Přidejte hodnotu 2 na konec vektoru nums.
  12. Deklarujte celočíselnou proměnnou n pro uložení velikosti vektorových čísel.
  13. Vytiskněte poslední hodnotu vektorových čísel vedle jiného textu. Mělo by vrátit 2.
  14. Odeberte poslední prvek z čísel vektorů. 2 bude odstraněna.
  15. Tisk textu na konzole. \n přesune kurzor na nový řádek, aby se tam vytiskl text.
  16. Použijte proměnnou iterátoru a k iteraci prvků vektoru nums.
  17. Vytiskněte hodnoty čísel vektorů na konzole pro každou iteraci.
  18. Vložte hodnotu 7 na začátek vektoru nums.
  19. Vytiskněte první hodnotu vektorových čísel vedle dalšího textu. Mělo by se vrátit 7.
  20. Odstraňte všechny prvky z čísel vektorů.
  21. Po vymazání veškerého obsahu vytiskněte velikost čísla vektoru vedle ostatního textu. Mělo by vrátit 0.
  22. Konec těla funkce main().

Kapacita

Použijte následující funkce k určení kapacity vektoru:

  • Velikost() – Vrací počet prvků ve vektoru.
  • Max_size() – Vrací nejvyšší počet položek, které může vektor uložit.
  • Kapacita() – Vrací množství úložného prostoru přiděleného vektoru.
  • Změnit velikost() – Změní velikost kontejneru tak, aby obsahoval n položek. Pokud je aktuální velikost vektoru větší než n, budou zadní položky z vektoru odstraněny. Pokud je aktuální velikost vektoru menší než n, budou na konec vektoru přidány další položky.
  • Prázdný() – vrátí hodnotu true, pokud je vektor prázdný. Jinak vrátí hodnotu false.

Tento poslední příklad hlásí a upravuje úložiště vektoru pomocí výše uvedených funkcí kapacity.

Příklad 3

#include <iostream> 
#include <vector> 
using namespace std;
int main() {
	vector<int> vector1;
	for (int x = 1; x <= 10; x++)
		vector1.push_back(x);
	cout << "Vector size: " << vector1.size()<< endl;
	cout << "Vector capacity: " << vector1.capacity() << endl;
	cout << "Maximum size of vector: " << vector1.max_size()<< endl;
	vector1.resize(5);
	cout << "Vector size after resizing: " << vector1.size() << endl;
	if (vector1.empty() == false)
		cout << "Vector is not empty"<<endl;
	else
		cout << "Vector is empty"<<endl;
	return 0;
}

Výstup:

C++ Výstup vektorové kapacity z příkladu 3

Zde je snímek obrazovky kódu:

C++ Příklad kódu 3 pro vektorovou kapacitu

Code Vysvětlení:

  1. Chcete-li použít jeho funkci, zahrňte do našeho kódu hlavičkový soubor iostream.
  2. Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor vektorových hlaviček.
  3. Zahrňte do našeho kódu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
  4. Zavolejte funkci main(). Programová logika by měla být přidána do těla této funkce.
  5. Vytvořte vektor s názvem vector1 pro ukládání celých čísel.
  6. Pomocí cyklu for vytvořte proměnnou x s ​​hodnotami od 1 do 10.
  7. Do vektoru vložíme hodnoty proměnné x.
  8. Vytiskněte velikost vektoru vedle jiného textu na konzole.
  9. Vytiskněte kapacitu vektoru vedle jiného textu na konzole.
  10. Vytiskněte maximální počet položek, které může vektor pojmout vedle jiného textu na konzole.
  11. Změňte velikost vektoru tak, aby obsahoval pouze 5 prvků.
  12. Vytiskněte novou velikost vektoru vedle jiného textu.
  13. Zkontrolujte, zda vektor není prázdný.
  14. Pokud vektor není prázdný, vytiskněte text na konzole.
  15. Pomocí příkazu else uveďte, co dělat, pokud je vektor prázdný.
  16. Text, který se má vytisknout na konzole, pokud je vektor prázdný.
  17. Program musí po úspěšném dokončení vrátit hodnotu.
  18. Konec těla funkce main().

Nejčastější dotazy

Vektor je dynamické pole, které se automaticky mění ve velikosti a zná svou vlastní velikost, zatímco vestavěné pole má pevnou délku nastavenou při kompilaci. Vektory spravují paměť za vás; nezpracovaná pole nikoli.

Pro rychlý přímý přístup použijte operátor dolního indexu, například nums[0]. Členská funkce at(), stejně jako nums.at(0), dělá totéž, ale vyvolá výjimku out_of_range, pokud je index neplatný, což ji činí bezpečnější.

Deklarujte vektor, jehož prvky jsou samy o sobě vektory, například vektor > mřížka. Velikost můžete měnit pomocí konstruktorů nebo funkcí push_back rows. Každý vnitřní vektor může růst nezávisle, což vám dává flexibilní matici s možností změny velikosti.

Vektor ukládá prvky do souvislé paměti s rychlým náhodným přístupem, zatímco std::list je dvojitě propojený seznam s rychlým vkládáním nebo mazáním kdekoli, ale bez přímého indexování. Vyberte na základě vašeho přístupového vzoru.

Zahrňte hlavičku algoritmu a zavolejte std::sort s iterátory begin a end, jako v sort(nums.begin(), nums.end()). Řazení je ve výchozím nastavení vzestupné; předejte vlastní komparátor nebo vyšší. () pro seřazení sestupně.

Ano. Vektor je šablona a může obsahovat libovolný typ, včetně řetězců, vlastních tříd a dokonce i dalších vektorů. Typ prvku deklarujte uvnitř lomených závorek, například vektor. nebo vektor .

Ano. Asistenti kódování s využitím umělé inteligence přemění krátkou výzvu nebo komentář na funkční vektorový kód, včetně deklarace, smyček push_back a iterací. Vždy si projděte navrhované typy, hranice a zpracování kapacity, protože umělá inteligence může přehlédnout požadavky specifické pro daný projekt.

Ano. GitHub Copilot Navrhuje deklarace vektorů, volání funkcí push_back a insert a iterační smyčky během psaní. Zvládá dobře opakující se standardizované postupy, i když byste měli před kompilací ověřit indexy, změnu velikosti a logiku.

Shrňte tento příspěvek takto: