Pole řetězců v C++ – 5 různých způsobů, jak vytvořit
V C++ je řetězec obvykle pouze polem (nebo odkazem/ukazuje na) znaků, které končí znakem NULL ‘ ‘. Řetězec je jednorozměrné pole znaků a pole řetězců je dvourozměrné pole znaků kde každý řádek obsahuje nějaký řetězec.
Níže je uvedeno 5 různých způsobů, jak vytvořit Array of Strings v C++:
- Použitím Ukazatele
- Použitím 2-D pole
- Za použití Třída String
- Za použití Vektorové třídy
- Za použití Třída Array
1. Použití ukazatelů
Ukazatele jsou symbolickou reprezentací adresy. Jednoduše řečeno, ukazatel je něco, co v něm ukládá adresu proměnné. V této metodě je pole řetězcových literálů vytvořeno polem ukazatelů, ve kterých každý ukazatel ukazuje na určitý řetězec.
Příklad:
C++
// C++ program to demonstrate> // array of strings using> // pointers character array> #include> // Driver code> int> main()> {> > // Initialize array of pointer> > const> char> * colour[4]> > = {> 'Blue'> ,> 'Red'> ,> 'Orange'> ,> 'Yellow'> };> > // Printing Strings stored in 2D array> > for> (> int> i = 0; i <4; i++)> > std::cout < < colour[i] < <> '
'> ;> > return> 0;> }> |
Výstup
Blue Red Orange Yellow
Vysvětlení:
- Počet řetězců je pevný, ale nemusí být. 4 lze vynechat a kompilátor vypočítá správnou velikost.
- Tyto řetězce jsou konstanty a jejich obsah nelze měnit. Protože řetězcové literály (doslova řetězce v uvozovkách) existují v oblasti paměti určené pouze pro čtení, musíme zde specifikovat const, abychom zabránili nechtěným přístupům, které by mohly způsobit selhání programu.
2. Použití 2D pole
2-D pole je nejjednodušší formou vícerozměrného pole, ve kterém ukládá data v tabulkové formě. Tato metoda je užitečná, když je známa délka všech řetězců a je požadována konkrétní paměťová stopa. Prostor pro řetězce bude přidělen v jednom bloku
Příklad:
C++
// C++ program to demonstrate> // array of strings using> // 2D character array> #include> // Driver code> int> main()> {> > // Initialize 2D array> > char> colour[4][10]> > = {> 'Blue'> ,> 'Red'> ,> 'Orange'> ,> 'Yellow'> };> > // Printing Strings stored in 2D array> > for> (> int> i = 0; i <4; i++)> > std::cout < < colour[i] < <> '
'> ;> > return> 0;> }> |
Výstup
Blue Red Orange Yellow
Vysvětlení:
- Počet strun i velikost strun jsou pevně dané. 4 může být opět vynechána a vhodnou velikost vypočítá kompilátor. Druhý rozměr však musí být uveden (v tomto případě 10), aby si kompilátor mohl zvolit vhodné rozložení paměti.
- Každý řetězec lze upravit, ale zabere celý prostor daný druhým rozměrem. Každá bude v paměti umístěna vedle sebe a nelze změnit velikost.
- Někdy je žádoucí kontrola nad velikostí paměti, což přidělí oblast paměti s pevným, pravidelným rozložením.
3. Použití třídy String
Řetězec STL popř třída strun lze použít k vytvoření pole měnitelných řetězců. V této metodě není velikost řetězce pevně stanovena a řetězce mohou být změněny, což jej však nějak činí dynamickým. std::string lze použít k vytvoření pole řetězců pomocí vestavěných funkcí.
Příklad:
C++
// C++ program to demonstrate> // array of strings using> // string class> #include> #include> // Driver code> int> main()> {> > // Initialize String Array> > std::string colour[4]> > = {> 'Blue'> ,> 'Red'> ,> 'Orange'> ,> 'Yellow'> };> > // Print Strings> > for> (> int> i = 0; i <4; i++)> > std::cout < < colour[i] < <> '
'> ;> }> |
Výstup
Blue Red Orange Yellow
Vysvětlení:
Pole má pevnou velikost, ale nemusí. Opět platí, že 4 zde může být vynechána a kompilátor určí vhodnou velikost pole. Řetězce jsou také proměnlivé, což umožňuje jejich změnu.
4. Použití třídy vector
A vektor je dynamické pole, které zdvojnásobí svou velikost, kdykoli je přidán nový znak, který překročí jeho limit. Kontejnerový vektor STL lze použít k dynamickému přidělování pole, které se může lišit velikostí.
To je použitelné pouze v C++, protože C nemá třídy. Všimněte si, že syntaxe seznamu inicializátorů zde vyžaduje kompilátor, který podporuje standard C++ 2011, a ačkoli je to docela pravděpodobné, váš kompilátor ano, je třeba si toho být vědomi.
Příklad:
C++
// C++ program to demonstrate> // array of strings using> // vector class> #include> #include> #include> // Driver code> int> main()> {> > // Declaring Vector of String type> > // Values can be added here using> > // initializer-list> > // syntax> > std::vector colour{> 'Blue'> ,> 'Red'> ,> > 'Orange'> };> > // Strings can be added at any time> > // with push_back> > colour.push_back(> 'Yellow'> );> > // Print Strings stored in Vector> > for> (> int> i = 0; i std::cout < < colour[i] < < '
'; }> |
Výstup
Blue Red Orange Yellow
Vysvětlení:
- Vektory jsou dynamická pole a umožňují vám kdykoli přidávat a odebírat položky.
- Ve vektorech lze použít jakýkoli typ nebo třídu, ale daný vektor může obsahovat pouze jeden typ.
5. Použití třídy Array
Pole je homogenní směs dat, která je nepřetržitě uložena v paměťovém prostoru. Pole kontejneru STL lze použít k přidělení pole pevné velikosti. Může být použit velmi podobně jako vektor, ale velikost je vždy pevná.
Příklad:
C++
// C++ program to demonstrate> // array of string using STL array> #include> #include> #include> // Driver code> int> main()> {> > // Initialize array> > std::array colour{> 'Blue'> ,> 'Red'> ,> > 'Orange'> ,> 'Yellow'> };> > // Printing Strings stored in array> > for> (> int> i = 0; i <4; i++)> > std::cout < < colour[i] < <> '
'> ;> > return> 0;> }> |
Výstup
Blue Red Orange Yellow
To nejsou v žádném případě jediné způsoby, jak vytvořit sbírku řetězců. C++ nabízí několik tříd kontejnerů, z nichž každá má různé kompromisy a funkce a všechny existují, aby splnily požadavky, které budete mít ve svých projektech. Prozkoumejte a bavte se!
Závěr: Ze všech metod se zdá, že Vector je nejlepší způsob, jak vytvořit pole řetězců v C++.
s.