A C ++ az egyik legerősebb és legfélelmetesebb programozási nyelv, amellyel kezdőként találkozhat. Az ok elég egyértelmű. Sok kódot igényel a kívánt kimenet eléréséhez. A szokásos sablonkönyvtár vagy az STL segíthet megoldani ezt a gondot.
Figyelembe véve az idő és erőfeszítés mennyiségét, miközben kódokat írunk olyan funkciókhoz, mint a rendezés és a keresés, az STL egyetlen kódsorral segíthet mindezen műveletek végrehajtásában. Ez a könyvtár rendkívül hasznos lehet a problémamegoldáshoz és a technikai interjúk előkészítéséhez.
Mi a szokásos sablonkönyvtár?
A Standard Template Library, vagy STL, egy C ++ könyvtár, amely előre felépített funkciókból és tárolókból áll. Tartalmaz néhány kiemelkedő sablon osztályt a közös adatstruktúrákhoz, például vektorok, verem, sorok, és néhány praktikus algoritmikus funkciót, például a bináris keresést a programozás megkönnyítése érdekében.
A C ++ szabványos sablonkönyvtára négy összetevőből áll:
- Algoritmusok
- Konténerek
- Funkciók
- Iterátorok
Vessünk egy pillantást az algoritmusokra és a tárolókra mélyebben, mivel ezek az STL leggyakrabban használt összetevői.
Algoritmusok az STL-ben
A fejlécfájl az STL része, amely több algoritmikus függvényből áll, amelyek felhasználhatók manuális kódolás helyett. Az algoritmusok egy része bináris keresés, rendezés és visszafordítás, amelyek rendkívül hasznosak.
Először is importálnia kell a fejléc a C ++ fájlban. A szintaxis a következő:
#include
A közelgő módszereknél vegyünk példának egy tömb változót, amelynek értéke {6, 2, 9, 1, 4}.
int arr [] = {6, 2, 9, 1, 4};
fajta()
A fajta() függvény segít a megadott adatstruktúrában lévő összes elem növekvő sorrendben történő rendezésében. Ennek a funkciónak két paramétere van: a kezdő iterátor és a befejező iterátor.
Összefüggő: Bevezetés a Merge Sort algoritmusba
Szintaxis:
rendezés (start_iterator, end_iterator);
Itt egy rövid példa:
rendezés (arr, arr + 5);
for (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}
Kimenet:
1 2 4 6 9
fordított()
A fordított() függvény megfordítja az elemek sorrendjét a megadott adatstruktúrában. Két paramétert fogad el: a kezdő iterátort és a befejező iterátort.
Szintaxis:
fordított (start_iterator, end_iterator);
Íme egy rövid példa a fenti módszerre:
hátramenet (arr, arr + 5);
for (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}
Kimenet:
4 1 9 2 6
* min_element () és * max_element ()
A funkciók * max_element () és * min_element () adja vissza a maximális és a minimális értéket a megadott adatszerkezetben. Mindkét függvény két érvet fogad el: a kezdő iterátort és a vég iterátort.
Szintaxis:
* max_element (start_iterator, end_iterator);
* min_element (kezdő_iterátor, end_iterátor);
Tudjuk meg, hogy ezek a függvények milyen értékeket adnak vissza, amikor meghívjuk őket a példa tömbre:
cout << * max_element (arr, arr + 5) << endl;
cout << * min_element (arr, arr + 5) << endl;
Kimenet:
9
1
bináris_keresés ()
A bináris_keresés () metódust használják annak megállapítására, hogy a megadott érték szerepel-e az adatszerkezetben, vagy sem. Három érvet fogad el: a kezdő iterátort, a befejező iterátort és a megtalálni kívánt értéket.
A bináris keresés csak rendezett adatstruktúrákon működik. Ezért meg kell hívnia a fajta() módszer először a bináris_keresés () módszer.
Szintaxis:
bináris_keresés (start_iterator, end_iterator, value_to_find)
A következő módszer bemutatása:
rendezés (arr, arr + 5);
bináris_keresés (arr, arr + 5, 2)? cout << "Elem megtalálva": cout << "Elem nem található";
bináris_keresés (arr, arr + 5, 7)? cout << "Elem megtalálva": cout << "Elem nem található";
Kimenet:
Elem megtalálva
Az elem nem található
számol()
A számol() metódus adja vissza a megadott érték előfordulásának számát az adatszerkezetben. Három érv szükséges: a kezdő iterátor, a vég iterátor és a számlálandó érték.
Szintaxis:
count (kezdő_iterátor, vég_iterátor, érték_számig);
Íme egy példa erre a módszerre:
cout << count (arr, arr + 5, 2) << endl;
Kimenet:
1
Konténerek az STL-ben
A konténerek az objektumok és adatok tárolására szolgáló adatstruktúrák. A vektorok, listák, halmok, várólisták, halmazok és térképek néhány olyan példa, amely adatokat tárol bennük a megadott primitív adattípus szerint. Ezeket a tárolókat úgy használhatja, hogy importálja a megfelelő fejléceket a C ++ fájlba.
A tároló változó inicializálása közben meg kell említenie a primitív adatokat, mint pl int, char, húr benne <> zárójelek.
Fedezzük fel néhány ilyen tárolót részletesebben:
Vektor
A vektorok dinamikus tömbök, amelyek átméretezhetők és rugalmasak a munkához. Amikor beilleszt vagy töröl egy elemet a vektorból, az automatikusan beállítja a vektor méretét. Ez hasonló a ArrayList adatstruktúra Java-ban.
Szintaxis:
#include
vektor változó_neve;
Íme néhány fontos vektor-módszer:
- push_back (érték): Ez a módszer az adatokat hozzáfűzi a vektorhoz.
- pop_back (): Ez a módszer eltávolítja az utolsó elemet a vektorból.
- beillesztés (index, érték): Ez a módszer új elemeket illeszt be az elem elé a megadott helyre.
- méret(): Ez a módszer visszaadja a vektor méretét.
- üres(): Ez a módszer ellenőrzi, hogy a vektor üres-e vagy sem.
- elülső(): Ez a módszer a vektor első értékét adja vissza.
- vissza(): A back metódus a vektor utolsó értékét adja vissza.
- itt (index): Ez a módszer visszaadja az értéket a megadott pozícióban.
- törlés (index): Az erase módszer eltávolítja az elemeket az adott indexből.
- egyértelmű(): Ez a módszer törli a vektor összes elemét.
vektor v = {23, 12, 56, 10};
v.push_back (5);
v.push_back (25);
v.pop_back ();
auto i = v. beszúrás (v. kezdet () + 1, 7);
cout << "Az adott vektor mérete" << v.size () << endl;
if (v.empty ()) {
cout << "A vektor üres" << endl;
} más {
cout << "A vektor nem üres" << endl;
}
cout << "Az első pozícióban lévő elem" << v.front () << endl;
cout << "Az elem az utolsó pozícióban" << v.back () << endl;
cout << "Az elem az adott pozícióban" << v.at (4) << endl;
v.erase (v.kezdés () + 1);
for (int i = 0; i cout << v [i] << "";
}
Kimenet:
Az adott vektor mérete 6
A vektor nem üres
Az első pozíció elem 23
Az elem az utolsó pozícióban 5
Elem az adott pozícióban 10
23 12 56 10 5
Sor
A várakozási adatstruktúrában az elemeket hátulról illesztik be, és elölről törlik. Ennélfogva a FIFO ("first in, first out") megközelítést követi.
Szintaxis:
#include
sor változó_neve;
Íme néhány fontos várakozási mód:
- nyomja (érték): Ez a módszer elemeket ad hozzá a sorhoz.
- pop(): Ez a módszer törli a sor első elemét.
- méret(): Ez a módszer a sor méretét adja vissza.
- elülső(): Ez a módszer a sor első elemét adja vissza.
- vissza(): Ez a módszer a sor utolsó elemét adja vissza.
sor q;
q.push (30);
q.push (40);
q.push (50);
q.push (60);
q.push (70);
cout << "Az első elem a" << q.front () << endl;
cout << "Az utolsó elem" << q.back () << endl;
cout << "A sor mérete" << q.size () << endl;
q.pop ();
cout << "A várólista összes elemének nyomtatása" << endl;
míg (! q.empty ()) {
cout << q.front () << "";
q.pop ();
}
Kimenet:
Az első elem 30
Az utolsó elem 70
A sor mérete 5
A várólista összes elemének kinyomtatása
40 50 60 70
Kazal
A rakatkonténerek a LIFO módszerrel működnek. A LIFO azt jelenti, hogy "utolsó be, első ki". Az adatokat ugyanabból a végből tolják és pattogják.
Szintaxis:
#include
Kazal változó_neve;
Íme néhány fontos verem módszer:
- nyomja (érték): Ez a módszer tolja az elemet a verembe.
- pop(): Ez a módszer törli a verem legfelső elemét.
- top (): Ez a módszer a verembe utoljára beírt elem értékét adja vissza.
- méret(): Ez a módszer visszaadja a verem méretét.
- üres(): Ez a módszer ellenőrzi, hogy a verem üres-e vagy sem.
verem s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "A verem tetején található" << s.top () << endl;
s.pop ();
cout << "A verem teteje a pop művelet elvégzése után:" << s.top () << endl;
cout << "A verem összes elemének nyomtatása" << endl;
míg (! s.empty ()) {
cout << s.top () << "";
s.pop ();
}
Kimenet:
A verem teteje 60-at tartalmaz
A verem teteje a pop művelet elvégzése után: 50
A verem összes elemének nyomtatása
50 40 30
Készlet
A készlet tárolókat egyedi értékek tárolására használják, és az elem értéke nem változtatható meg, miután beillesztették a készletbe. A készlet összes elemét rendezett módon tároljuk. A beállított konténer hasonló a állítsa be az adatszerkezetet a Pythonban.
Szintaxis:
#include
készlet változó_neve;
Íme néhány fontos készletmódszer:
- beillesztés (érték): Ez a módszer elemeket illeszt be a készletbe.
- kezdődik(): Ez a módszer visszaadja az iterátort a halmaz első eleméhez.
- vége (): Ez a módszer visszaadja az iterátort a halmaz utolsó elemére.
- méret(): Ez a módszer visszaadja a halmaz méretét.
- üres(): Ez a módszer ellenőrzi, hogy a készlet üres-e vagy sem.
- megtalálni (érték): Ez a módszer visszaadja az iterátort a paraméterben átadott elemnek. Ha az elem nem található, akkor ez a függvény visszaadja az iterátort a halmaz végére.
- törlés (érték): Ez a módszer törölte a megadott elemet a készletből.
halmaz s;
s.betét (20);
s.betét (30);
s.betét (40);
s.betét (50);
s.betét (60);
s.betét (60);
s.betét (60);
auto i = s.kezdés ();
cout << "Elem az első helyen" << * i << endl;
cout << "A halmaz mérete" << s.size () << endl;
s.find (20)! = s.end ()? cout << "Elem megtalálva" << endl: cout << "Elem nem található" << endl;
s.erase (30);
cout << "Az összes elem nyomtatása" << endl;
for (auto i = s.begin (); i! = s.end (); i ++) {
cout << * i << "";
}
Kimenet:
Elem az első helyen 20
A készlet mérete 5
Elem megtalálva
Az összes elem nyomtatása
20 40 50 60
A C ++ -nak nem kell keménynek lennie
Csakúgy, mint minden más készség, a gyakorlat is elengedhetetlen ahhoz, hogy a legtöbbet hozza ki az STL-ből. Ezek a tárolók és algoritmusok sok időt takaríthatnak meg, és egyszerűen használhatók. Kezdje a fenti példák gyakorlásával, és végül elkezdje használni saját projektjeiben is.
Ha azonban most először tanulja meg a C ++ nyelvet, akkor kezdje el az alapok elsajátításával, mielőtt megértené az STL-t.
Szeretne megtanulni C ++ nyelvet? Itt vannak a legjobb webhelyek és online tanfolyamok a C ++ programhoz kezdőknek és tapasztalt programozóknak egyaránt.
Olvassa el a következőt
- Programozás
- Kódolási oktatóanyagok
- Funkcionális programozás
Nitin lelkes szoftverfejlesztő és számítástechnikai hallgató, aki JavaScript-technológiákat használó webalkalmazásokat fejleszt. Szabadúszó webfejlesztőként dolgozik, és szabadidejében szeret írni a Linux és a Programozás számára.
Iratkozzon fel hírlevelünkre
Csatlakozzon hírlevelünkhöz, amely műszaki tippeket, véleményeket, ingyenes e-könyveket és exkluzív ajánlatokat tartalmaz!
Még egy lépés…!
Kérjük, erősítse meg e-mail címét az imént elküldött e-mailben.