Vektor v C++ Standardní knihovna šablon (STL) s příkladem
Co je to C++ Vektor?
A C++ vektor 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. Ukládá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ů.
Vkládání nových dat do vektoru se provádí na jeho konci. To trvá rozdílný čas. Odstranění prvku z vektoru trvá konstantní čas. Důvodem je, že není potřeba měnit velikost vektoru. Vložení nebo odstranění prvku na začátku vektoru trvá lineárně.
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í známa před začátkem, vektor nebude vyžadovat, abyste nastavili maximální velikost 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.
- Datový typ je datový typ prvků, které mají být uloženy ve vektoru.
- Název je název vektoru nebo datových prvků.
- Položky označují počet prvků pro vektorová data. Tento parametr je volitelný.
Iterátory
Účelem iterátorů je pomoci nám přistupovat k prvkům, které jsou uloženy ve vektoru. Je to objekt, který funguje jako ukazatel. Zde jsou běžné iterátory podporované C++ vektory:
- vector:: begin(): dává iterátor, který ukazuje na první prvek vektoru.
- vector:: end(): 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 vektorové prvky.
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.
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:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Zahrňte do našeho kódu hlavičkový soubor iostream. Umožní nám to číst a zapisovat do konzole.
- Zahrňte soubor vektorového záhlaví do našeho kódu. Umožní nám to pracovat s vektory C++.
- Zahrňte jmenný prostor std, abyste mohli používat jeho třídy a funkce bez jeho volání.
- Zavolejte funkci main(), do které má být přidána logika programu.
- { označuje začátek těla funkce main().
- Deklarujte vektor s názvem nums pro uložení sady celých čísel.
- Vytvořte cyklus for, který nám pomůže iterovat vektor. Proměnná nám pomůže iterovat přes vektorové prvky od 1st na 5th Prvky.
- 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.
- Vytiskněte nějaký text na konzoli
- 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().
- Vytiskněte hodnoty, na které ukazuje proměnná iterátoru a na konzole pro každou iteraci.
- Vytiskněte nějaký text na konzoli. \n je znak nového řádku, přesouvá kurzor na nový řádek a tiskne se odtud.
- Použijte proměnnou iterátoru k iteraci prvků vektoru nums od začátku až po prvek za koncem. Všimněte si, že používáme iterátory vector::cbegin() a vector::cend().
- Pro každou iteraci vytiskněte na konzole hodnoty, na které ukazuje proměnná iterátoru a.
- Funkce main by měla vrátit hodnotu, pokud program běží úspěšně.
- Konec těla funkce main().
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:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu hlavičkový soubor iostream.
- Chcete-li jej použít, zahrňte do našeho kódu soubor záhlaví vektoru funkce.
- Zahrňte jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
- Zavolejte funkci main(). Logika programu by měla být přidána do jeho těla.
- Začátek těla funkce main().
- Deklarujte vektor s názvem nums, abyste uložili nějaké celočíselné hodnoty.
- Uložte 5 prvků do vektorových čísel. Každý s hodnotou 1.
- Vytiskněte nějaký text na konzoli
- Použijte proměnnou iterátoru a k iteraci prvků vektoru nums.
- Vytiskněte hodnoty čísel vektorů na konzole pro každou iteraci.
- Přidejte hodnotu 2 na konec vektoru nums.
- Deklarujte celočíselnou proměnnou n pro uložení velikosti vektorových čísel.
- Vytiskněte poslední hodnotu vektorových čísel vedle jiného textu. Mělo by vrátit 2.
- Odeberte poslední prvek z čísel vektorů. 2 bude odstraněna.
- Tisk textu na konzole. \n přesune kurzor na nový řádek, aby se tam vytiskl text.
- Použijte proměnnou iterátoru a k iteraci prvků vektoru nums.
- Vytiskněte hodnoty čísel vektorů na konzole pro každou iteraci.
- Vložte hodnotu 7 na začátek vektoru nums.
- Vytiskněte první hodnotu vektorových čísel vedle dalšího textu. Mělo by se vrátit 7.
- Odstraňte všechny prvky z čísel vektorů.
- Po vymazání veškerého obsahu vytiskněte velikost čísla vektoru vedle ostatního textu. Mělo by vrátit 0.
- Konec těla funkce main().
Kapacita
K určení kapacity vektoru použijte následující funkce:
- Velikost () –Vrací počet položek ve vektoru.
- Max_size() -Vrátí nejvyšší počet položek, které může vektor uložit.
- Kapacita () – It vrátí množství úložného prostoru přiděleného vektoru.
- Změnit velikost () – It změní velikost kontejneru tak, aby obsahoval n položek. Pokud je aktuální velikost vektoru větší než n, zadní položky budou z vektoru odstraněny. Pokud je aktuální velikost vektoru menší než n, budou na zadní stranu vektoru přidány další položky.
- Prázdné () –it vrací true, pokud je vektor prázdný. V opačném případě vrátí hodnotu false.
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:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Chcete-li použít jeho funkci, zahrňte do našeho kódu hlavičkový soubor iostream.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor vektorových hlaviček.
- Zahrňte do našeho kódu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
- Zavolejte funkci main(). Programová logika by měla být přidána do těla této funkce.
- Vytvořte vektor s názvem vector1 pro ukládání celých čísel.
- Pomocí cyklu for vytvořte proměnnou x s hodnotami od 1 do 10.
- Do vektoru vložíme hodnoty proměnné x.
- Vytiskněte velikost vektoru vedle jiného textu na konzole.
- Vytiskněte kapacitu vektoru vedle jiného textu na konzole.
- Vytiskněte maximální počet položek, které může vektor pojmout vedle jiného textu na konzole.
- Změňte velikost vektoru tak, aby obsahoval pouze 5 prvků.
- Vytiskněte novou velikost vektoru vedle jiného textu.
- Zkontrolujte, zda vektor není prázdný.
- Pokud vektor není prázdný, vytiskněte text na konzole.
- Pomocí příkazu else uveďte, co dělat, pokud je vektor prázdný.
- Text, který se má vytisknout na konzole, pokud je vektor prázdný.
- Program musí po úspěšném dokončení vrátit hodnotu.
- Konec těla funkce main().
Shrnutí
- A C++ vector je dynamické pole schopné automaticky změnit velikost, když je z něj přidán nebo odstraněn prvek.
- Úložiště pro vektor je řešeno automaticky kontejnerem.
- Prvky vektoru jsou uloženy v souvislém úložišti, aby bylo možné k nim přistupovat a poté je procházet pomocí iterátorů.
- Vkládání nových dat do vektoru se provádí na jeho konci.
- Vkládání dat do vektoru trvá rozdílnou dobu.
- Odstranění prvku z vektoru trvá konstantní čas.
- Vložení nebo odstranění prvku na začátku trvá lineárně.
- Vektory by se měly používat při práci s datovými prvky, které se konzistentně mění.
- Také můžete použít vektory, pokud velikost dat není známa před začátkem.