std::array
Főnév
std::array (tsz. std::arrays)
- (informatika) Az
std::arraya 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.
1. Mi az 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.
Előnyei a hagyományos C++ tömbhöz képest
✅ 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.
2. std::array deklarálása és inicializálása
Az 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[0] << std::endl;
std::cout << "Masodik elem: " << szamok[1] << 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.- Használható a hagyományos tömbhöz hasonlóan, de plusz funkciókkal rendelkezik.
3. Elemléptetés és bejárás for ciklussal
Az std::array elemei indexelve vannak, így for ciklussal könnyen bejárhatók.
Példa – Hagyományos 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[" << i << "] = " << szamok[i] << std::endl;
}
return 0;
}
- A
.size()metódussal kérhetjük le a tömb méretét. - Nincs szükség külön
sizeof()számításra, mint a sima C++ tömböknél.
Példa – Tartomány alapú 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
- Egyszerűbb és olvashatóbb, mint az indexalapú ciklus.
4. std::array metódusai
Az 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 |
Példa – 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;
}
- Az
.at()biztonságosabb, mint aszamok[1], mert kivételt dob, ha az index hibás.
5. std::array és STL algoritmusok
Az std::array kompatibilis az STL algoritmusokkal, így olyan függvényekkel is működik, mint az std::sort() vagy std::find().
Példa – 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
- Az
std::sort()függvény abegin()ésend()iterátorokat használja a rendezéshez.
6. 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ő |
Mikor használjuk az 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.
Mikor használjuk az std::vector-t?
✅ Ha a méret változhat futásidőben.
✅ Ha nagy mennyiségű elemet kezelünk.
Összegzés
✔ 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.
- std::array - Szótár.net (en-hu)
- std::array - Sztaki (en-hu)
- std::array - Merriam–Webster
- std::array - Cambridge
- std::array - WordNet
- std::array - Яндекс (en-ru)
- std::array - Google (en-hu)
- std::array - Wikidata
- std::array - Wikipédia (angol)