std::array (tsz. std::arrays)
std::array
a C++ Standard Library (<array>
fejléc) egy modern tömbtípusa, amely a hagyományos C++ tömbök alternatívája. A C++11 szabvány hozta be, és egy statikus méretű tömb, amely néhány extra funkcióval rendelkezik a hagyományos tömbökhöz képest.
std::array
?Az std::array
egy fix méretű tömb, amely a std::vector
-ral ellentétben nem dinamikus. A méretét a fordítási időben kell meghatározni, így a stack memóriában tárolódik, és nem kell new
vagy delete
hívásokkal foglalkozni.
✅ Biztonságosabb: Van hozzá tartozó metódus (.size()
, .at()
, stb.).
✅ Jobban kompatibilis az STL-lel: Olyan funkciók érhetők el rá, mint az std::sort()
, std::find()
, stb.
✅ Típusbiztosabb: Könnyebben átlátható és karbantartható.
✅ Hatékony: Nem tartalmaz dinamikus memóriafoglalást, ezért gyors.
std::array
deklarálása és inicializálásaAz std::array
deklarálásának szintaxisa:
#include <iostream>
#include <array>
int main() {
std::array<int, 5> szamok = {10, 20, 30, 40, 50};
std::cout << "Elso elem: " << szamok << std::endl;
std::cout << "Masodik elem: " << szamok << std::endl;
return 0;
}
Kimenet:
Elso elem: 10 Masodik elem: 20
std::array<int, 5>
→ Statikus méretű tömb, amely 5 egész számot tartalmaz.
for
ciklussalAz std::array
elemei indexelve vannak, így for ciklussal könnyen bejárhatók.
for
ciklussal#include <iostream>
#include <array>
int main() {
std::array<int, 5> szamok = {10, 20, 30, 40, 50};
for (size_t i = 0; i < szamok.size(); i++) {
std::cout << "szamok = " << szamok << std::endl;
}
return 0;
}
.size()
metódussal kérhetjük le a tömb méretét.sizeof()
számításra, mint a sima C++ tömböknél.
for
ciklussal#include <iostream>
#include <array>
int main() {
std::array<int, 5> szamok = {10, 20, 30, 40, 50};
for (int szam : szamok) {
std::cout << szam << " ";
}
return 0;
}
Kimenet:
10 20 30 40 50
std::array
metódusaiAz std::array
a következő fontos metódusokat támogatja:
Metódus | Leírás |
---|---|
.size()
|
Visszaadja a tömb méretét |
.at(index)
|
Biztonságos elemlekérdezés (kivételt dob, ha index hibás) |
.front()
|
Az első elemet adja vissza |
.back()
|
Az utolsó elemet adja vissza |
.fill(value)
|
Az összes elemet az adott értékre állítja |
.data()
|
A tömb első elemének pointerét adja vissza |
at()
, front()
, back()
#include <iostream>
#include <array>
int main() {
std::array<int, 5> szamok = {10, 20, 30, 40, 50};
std::cout << "Elso elem (front()): " << szamok.front() << std::endl;
std::cout << "Utolsó elem (back()): " << szamok.back() << std::endl;
std::cout << "Masodik elem (at()): " << szamok.at(1) << std::endl; // Biztonságos lekérdezés
return 0;
}
.at()
biztonságosabb, mint a szamok
, mert kivételt dob, ha az index hibás.
std::array
és STL algoritmusokAz std::array
kompatibilis az STL algoritmusokkal, így olyan függvényekkel is működik, mint az std::sort()
vagy std::find()
.
std::sort()
használata#include <iostream>
#include <array>
#include <algorithm> // STL algoritmusok
int main() {
std::array<int, 5> szamok = {50, 10, 40, 30, 20};
std::sort(szamok.begin(), szamok.end()); // Rendezés növekvő sorrendben
for (int szam : szamok) {
std::cout << szam << " ";
}
return 0;
}
Kimenet:
10 20 30 40 50
std::sort()
függvény a begin()
és end()
iterátorokat használja a rendezéshez.
std::array
vs. std::vector
Tulajdonság | std::array
|
std::vector
|
---|---|---|
Méret | Fix méretű | Dinamikusan változtatható |
Memória | Stack alapú | Heap alapú |
Teljesítmény | Gyorsabb, nincs dinamikus memóriafoglalás | Lassabb lehet dinamikus növekedés miatt |
Biztonság | Tartalmaz ellenőrzött metódusokat | Szintén biztonságos |
Rugalmasság | Kevésbé rugalmas, mert fix méretű | Nagyon rugalmas, mivel bővíthető |
std::array
-t?✅ Ha fix méretű tömbre van szükségünk.
✅ Ha gyors teljesítmény kell dinamikus memóriafoglalás nélkül.
✅ Ha kompatibilitás kell az STL algoritmusokkal.
std::vector
-t?✅ Ha a méret változhat futásidőben.
✅ Ha nagy mennyiségű elemet kezelünk.
✔ Az std::array
egy biztonságosabb és hatékonyabb alternatíva a hagyományos tömbökhöz.
✔ Támogatja az STL algoritmusokat, mint az std::sort()
, std::find()
, stb.
✔ Fix méretű és gyors, mivel nincs dinamikus memóriafoglalás.
✔ STL iterátorokkal és metódusokkal kompatibilis.
✔ Ha rugalmas méretre van szükség, akkor inkább std::vector
ajánlott.