C ++ yra viena iš galingiausių ir bauginančių programavimo kalbų, su kuriomis galite susidurti kaip pradedantieji. Priežastis gana paprasta. Norint pasiekti norimą išvestį, reikia daug kodo. Standartinė šablonų biblioteka arba STL gali padėti išspręsti šią mįslę.

Atsižvelgiant į laiką ir pastangas, sunaudotas rašant kodą tokioms funkcijoms kaip rūšiavimas ir paieška, STL gali padėti atlikti visas šias operacijas tik su viena kodo eilute. Ši biblioteka gali būti nepaprastai naudinga sprendžiant problemas ir rengiant techninius pokalbius.

Kas yra standartinė šablonų biblioteka?

Standartinė šablonų biblioteka arba STL yra C ++ biblioteka, kurią sudaro iš anksto sukonstruotos funkcijos ir konteineriai. Tai apima keletą žinomų šablonų klasių, skirtų bendroms duomenų struktūroms, tokioms kaip vektoriai, kaminai, eilės, ir keletą patogių algoritminių funkcijų, tokių kaip dvejetainė paieška, kad būtų lengviau programuoti.

Standartinę šablonų biblioteką C ++ sudaro keturi komponentai:

  1. Algoritmai
  2. Konteineriai
  3. Funkcijos
  4. Iteratoriai
instagram viewer

Pažvelkime į algoritmus ir talpyklas giliau, nes tai yra dažniausiai naudojami STL komponentai.

Algoritmai STL

antraštės failas yra STL dalis, susidedanti iš kelių algoritminių funkcijų, kurias galima naudoti užuot rankiniu būdu jas kodavus. Kai kurie įtraukti algoritmai yra dvejetainė paieška, rūšiavimas ir reversas, kurie yra labai naudingi.

Norėdami pradėti, turite importuoti antraštę jūsų C ++ faile. Sintaksė yra tokia:

# įtraukti 

Pasirinkdami būsimus metodus, kaip pavyzdį apsvarstykite masyvo kintamąjį, kurio reikšmės yra {6, 2, 9, 1, 4}.

int arr [] = {6, 2, 9, 1, 4};

rūšiuoti ()

rūšiuoti () funkcija padeda rūšiuoti visus nurodytos duomenų struktūros elementus didėjimo tvarka. Šiai funkcijai reikia dviejų parametrų: pradinio iteratoriaus ir pabaigos iteratoriaus.

Susijęs: Įvadas į suliejimo rūšiavimo algoritmą

Sintaksė:

rūšiuoti (start_iterator, end_iterator);

Štai trumpas pavyzdys:

rūšiuoti (arr, arr + 5);
už (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}

Išvestis:

1 2 4 6 9

atvirkštinis ()

atvirkštinis () funkcija pakeičia nurodytų duomenų struktūros elementų tvarką. Jis priima du parametrus: pradinį iteratorių ir pabaigos iteratorių.

Sintaksė:

atvirkštinis (start_iterator, end_iterator);

Štai trumpas pirmiau minėto metodo pavyzdys:

atvirkštinė (arr, arr + 5);
už (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}

Išvestis:

4 1 9 2 6

* min_element () ir * max_element ()

Funkcijos * max_element () ir * min_element () atitinkamai grąžinkite didžiausią ir mažiausią reikšmę nurodytoje duomenų struktūroje. Abi šios funkcijos priima du argumentus: pradžios iteratorių ir pabaigos iteratorių.

Sintaksė:

* max_element (start_iterator, end_iterator);
* min_element (start_iterator, end_iterator);

Sužinokime, kokias reikšmes grąžina šios funkcijos, iškvietus jas į masyvo pavyzdį:

cout << * max_element (arr, arr + 5) << endl;
cout << * min_element (arr, arr + 5) << endl;

Išvestis:

9
1

binary_search ()

binary_search () metodas naudojamas norint nustatyti, ar nurodyta vertė yra duomenų struktūroje, ar ne. Ji priima tris argumentus: pradinį iteratorių, pabaigos iteratorių ir norimą rasti vertę.

Dvejetainė paieška veikia tik rūšiuojant duomenų struktūras. Todėl turėsite paskambinti rūšiuoti () metodas pirmiausia prieš binary_search () metodas.

Sintaksė:

dvejetainis_paieškos (pradžios_teritorius, pabaigos_iteratorius, vertės_nurasti)

Štai šio metodo demonstracija:

rūšiuoti (arr, arr + 5);
binary_search (arr, arr + 5, 2)? cout << "Elementas rastas": cout << "Elementas nerastas";
binary_search (arr, arr + 5, 7)? cout << "Elementas rastas": cout << "Elementas nerastas";

Išvestis:

Rastas elementas
Elementas nerastas

suskaičiuoti ()

suskaičiuoti () metodas grąžina nurodytos vertės įvykių skaičių duomenų struktūroje. Tam reikia trijų argumentų: pradžios iteratoriaus, pabaigos iteratoriaus ir skaičiuojamos vertės.

Sintaksė:

skaičius (pradžios_teritorius, pabaigos_iteratorius, vertės_skaičius);

Štai šio metodo pavyzdys:

cout << count (arr, arr + 5, 2) << endl;

Išvestis:

1

Konteineriai STL

Konteineriai yra duomenų struktūros, kuriose saugomi objektai ir duomenys. Vektoriai, sąrašai, kaminai, eilės, rinkiniai ir žemėlapiai yra keletas pavyzdžių, kuriuose duomenys saugomi pagal nurodytą primityvų duomenų tipą. Šiuos konteinerius galite naudoti importuodami atitinkamas antraštes į C ++ failą.

Inicijuodami konteinerio kintamąjį, turite paminėti tokius primityvius duomenis kaip tarpt, char, stygos viduje <> skliausteliuose.

Panagrinėkime kai kuriuos iš šių konteinerių išsamiau:

Vektorius

Vektoriai yra dinaminiai masyvai, kurių dydį galima keisti ir lanksčiai naudoti. Kai įterpiate arba ištrinate elementą iš vektoriaus, jis automatiškai koreguoja vektoriaus dydį. Tai panašu į „ArrayList“ duomenų struktūra Java.

Sintaksė:

# įtraukti 
vektorius kintamas_vardas;

Štai keletas svarbių vektorinių metodų:

  1. „push_back“ (vertė): Šis metodas prideda duomenis prie vektoriaus.
  2. pop_back (): Šis metodas pašalina paskutinį elementą iš vektoriaus.
  3. įterpti (rodyklė, vertė): Šis metodas įterpia naujus elementus prieš elementą nurodytoje vietoje.
  4. dydis (): Šis metodas pateikia vektoriaus dydį.
  5. tuščia(): Šis metodas patikrina, ar vektorius tuščias, ar ne.
  6. priekis (): Šis metodas pateikia pirmąją vektoriaus vertę.
  7. atgal (): Atgalinis metodas pateikia paskutinę vektoriaus vertę.
  8. (indeksas): Šis metodas grąžina vertę nurodytoje pozicijoje.
  9. ištrinti (rodyklė): Ištrynimo metodas pašalina elementus iš pateikto indekso.
  10. aišku (): Šis metodas išvalo visus vektoriaus elementus.
vektorius  v = {23, 12, 56, 10};
v.push_back (5);
v.push_back (25);
v.pop_back ();
auto i = v. įdėti (v. pradžia () + 1, 7);
cout << "Duoto vektoriaus dydis" << v.size () << endl;
jei (v.emptas ()) {
cout << "Vektorius tuščias" << endl;
} Kitas {
cout << "Vektorius nėra tuščias" << endl;
}
cout << "Elementas pirmoje pozicijoje yra" << v.front () << endl;
cout << "Elementas paskutinėje pozicijoje yra" << v.back () << endl;
cout << "Elementas tam tikroje padėtyje yra" << v.at (4) << endl;
v.erase (v.pradėti () + 1);
už (int i = 0; i cout << v [i] << "";
}

Išvestis:

Duoto vektoriaus dydis 6
Vektorius nėra tuščias
Elementas pirmoje pozicijoje yra 23
Elementas paskutinėje pozicijoje yra 5
Elementas duotoje pozicijoje yra 10
23 12 56 10 5

Eilė

Eilės duomenų struktūroje elementai įterpiami iš galo ir ištrinami iš priekio. Vadinasi, jis vadovaujasi FIFO („pirmas, pirmas, išeina“) požiūriu.

Sintaksė:

# įtraukti 
eilė kintamas_vardas;

Štai keli svarbūs eilės metodai:

  1. stumti (vertė): Šis metodas įtraukia elementus į eilę.
  2. pop (): Šis metodas pašalina pirmąjį eilės elementą.
  3. dydis (): Šis metodas pateikia eilės dydį.
  4. priekis (): Šis metodas pateikia pirmąjį eilės elementą.
  5. atgal (): Šis metodas pateikia paskutinį eilės elementą.
eilė  q;
q.push (30);
q.push (40);
q.push (50);
q.push (60);
q.push (70);
cout << "Pirmasis elementas yra" << q.front () << endl;
cout << "Paskutinis elementas yra" << q.back () << endl;
cout << "Eilės dydis yra" << q.size () << endl;
q.pop ();
cout << "Visų eilės elementų spausdinimas" << endl;
o (! q.naujas ()) {
cout << q.front () << "";
q.pop ();
}

Išvestis:

Pirmasis elementas yra 30
Paskutinis elementas yra 70
Eilės dydis yra 5
Spausdinti visus eilės elementus
40 50 60 70

Sukrauti

Krovinių konteineriai veikia pagal LIFO metodą. LIFO reiškia „paskutinis, pirmas išėjęs“. Duomenys stumiami ir iššokami iš to paties galo.

Sintaksė:

# įtraukti 
kamino kintamas_vardas;

Štai keletas svarbių kamino būdų:

  1. stumti (vertė): Šis metodas stumia elementą į rietuvę.
  2. pop (): Šis metodas pašalina viršutinį kamino elementą.
  3. viršuje (): Šis metodas pateikia paskutinio į kaminą įvesto elemento vertę.
  4. dydis (): Šis metodas grąžina kamino dydį.
  5. tuščia(): Šis metodas patikrina, ar kaminas tuščias.
kaminas  s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "Šūsnies viršuje yra" << s.top () << endl;
s.pop ();
cout << "Viršutinė kamino dalis atlikus pop operaciją:" << s.top () << endl;
cout << "Visų kamino elementų spausdinimas" << endl;
o (! s.naujas ()) {
cout << s.top () << "";
s.pop ();
}

Išvestis:

Kamino viršuje yra 60
Viršutinė kamino dalis atlikus pop operaciją: 50
Visų kamino elementų spausdinimas
50 40 30

Nustatyti

Rinkinių sudėtiniai rodiniai naudojami unikalioms vertėms laikyti, o elemento vertės negalima pakeisti, kai jis įterpiamas į rinkinį. Visi rinkinio elementai saugomi rūšiuojami. Nustatytas konteineris yra panašus į nustatyti duomenų struktūrą „Python“.

Sintaksė:

# įtraukti 
rinkinys kintamas_vardas;

Štai keletas svarbių nustatytų metodų:

  1. įterpti (vertė): Šis metodas įterpia elementus į rinkinį.
  2. pradėti (): Šis metodas grąžina iteratorių į pirmąjį aibės elementą.
  3. galas(): Šis metodas grąžina iteratorių į paskutinį rinkinio elementą.
  4. dydis (): Šis metodas pateikia rinkinio dydį.
  5. tuščia(): Šis metodas patikrina, ar rinkinys tuščias, ar ne.
  6. rasti (vertė): Šis metodas grąžina iteratorių parametre perduotam elementui. Jei elementas nerastas, ši funkcija grąžina iteratorių į rinkinio pabaigą.
  7. ištrinti (vertė): Šis metodas ištrino nurodytą elementą iš rinkinio.
rinkinys  s;
s. įdėkite (20);
s.įdėkite (30);
s.įdėkite (40);
s.įdėkite (50);
s.įdėkite (60);
s.įdėkite (60);
s.įdėkite (60);
auto i = s. pradžia ();
cout << "Elementas pirmoje pozicijoje" << * i << endl;
cout << "Aibės dydis" << s.size () << endl;
s.find (20)! = s.end ()? cout << "Elementas rastas" << endl: cout << "Elementas nerastas" << endl;
s.erase (30);
cout << "Visų elementų spausdinimas" << endl;
for (auto i = s. pradžia (); i! = s.end (); i ++) {
cout << * i << "";
}

Išvestis:

Elementas pirmoje pozicijoje 20
Rinkinio dydis 5
Rastas elementas
Visų elementų spausdinimas
20 40 50 60

C ++ neturi būti sunku

Kaip ir visi kiti įgūdžiai, praktika yra būtina norint kuo geriau išnaudoti STL. Šie sudėtiniai rodiniai ir algoritmai gali padėti sutaupyti daug laiko ir yra lengvai naudojami. Pradėkite praktikuoti aukščiau pateiktus pavyzdžius ir galų gale pradėsite tai naudoti ir savo projektuose.

Tačiau jei pirmą kartą mokotės C ++, pradėkite mokytis pagrindų, prieš pradėdami suprasti STL.

El
Kaip išmokti „C ++“ programavimo: pradėkite 6 svetaines

Norite išmokti C ++? Čia pateikiamos geriausios C ++ svetainės ir internetiniai kursai pradedantiesiems ir patyrusiems programuotojams.

Skaitykite toliau

Susijusios temos
  • Programavimas
  • Kodavimo vadovėliai
  • Funkcinis programavimas
Apie autorių
Nitinas Ranganatas (Paskelbti 22 straipsniai)

Nitin yra aistringas programinės įrangos kūrėjas ir kompiuterių inžinerijos studentas, kuriantis žiniatinklio programas naudojant „JavaScript“ technologijas. Jis dirba kaip laisvai samdomas interneto kūrėjas ir laisvalaikiu mėgsta rašyti „Linux“ ir „Programming“.

Daugiau iš Nitino Ranganatho

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kuriame rasite techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Dar vienas žingsnis…!

Prašome patvirtinti savo el. Pašto adresą el. Laiške, kurį jums ką tik išsiuntėme.

.