subscript operator
Megjelenés
Főnév
subscript operator (tsz. subscript operators)
- (informatika) A subscript operator (
operator[]) C++-ban egy túlterhelhető operátor, amelyet arra használunk, hogy egy objektumból index alapján elérjük egy elemét, mintha tömb lenne. A[]operátor segítségével saját osztályainkat is tömbszerűen használhatóvá tehetjük.
🧠 Alap szintaxis
Beépített típusnál (pl. tömb):
int arr[5] = {1, 2, 3, 4, 5};
std::cout << arr[2]; // Kiírja: 3
Saját típusnál:
class SajatTomb {
int data[10];
public:
int& operator[](int index) {
return data[index];
}
};
🎯 Célja
A [] operátor túlterhelésével az osztályunk viselkedhet úgy, mint egy tömb vagy térkép:
SajatTomb t;
t[3] = 42;
std::cout << t[3]; // 42
🧱 Alapvető forma
T& operator[](int index);
const T& operator[](int index) const;
- nem-const verzió: írható referencia (pl. balértékként használható)
- const verzió: csak olvasható
🔐 Példa: saját vektor
class IntVector {
int* data;
int size;
public:
IntVector(int n): size(n) {
data = new int[n]{};
}
~IntVector() {
delete[] data;
}
int& operator[](int i) {
if (i < 0 || i >= size) throw std::out_of_range("index out of range");
return data[i];
}
const int& operator[](int i) const {
if (i < 0 || i >= size) throw std::out_of_range("index out of range");
return data[i];
}
};
✅ Használat
IntVector v(5);
v[2] = 99;
std::cout << v[2]; // 99
⚠️ Fontos megjegyzések
| Szempont | Megjegyzés |
|---|---|
| Hibatűrés | Nem kötelező bounds check, de ajánlott (throw std::out_of_range) |
| const helyzet | const objektumokon csak a const verzió hívható |
| Referenciát ad vissza | Így lehet értéket módosítani: v[1] = 7; |
| Bármilyen index típus lehet | nem csak int, lehet pl. std::string is map-szerű osztálynál |
🗂️ Haladó példa – asszociatív indexelés
#include <map>
#include <string>
class Config {
std::map<std::string, std::string> data;
public:
std::string& operator[](const std::string& key) {
return data[key];
}
const std::string& operator[](const std::string& key) const {
return data.at(key); // dob kivételt ha nem létezik
}
};
🧪 STL és operator[]
std::vector,std::array,std::map,std::unordered_map,std::stringstb. mind túlterhelik azoperator[]-t.- Viselkedésük típusonként eltér:
| Típus | Viselkedés |
|---|---|
std::vector |
nincs bounds check |
std::map |
ha nem létezik kulcs, új elemet hoz létre |
std::string |
nincs bounds check |
🔁 Különbség [] és .at() között
| Művelet | Hibakezelés |
|---|---|
v[i] |
nincs ellenőrzés |
v.at(i) |
dob out_of_range kivételt |
🧾 Összegzés
- Az
operator[]túlterhelés lehetővé teszi, hogy osztályainkat indexelhető objektumként kezeljük. - Két verziója szokásos: íráshoz és csak olvasáshoz.
- Hasznos saját vektor, mátrix, kulcs-érték alapú adattárolók esetén.
- Használatánál figyelni kell a bounds checking-re és a referenciákra.
- subscript operator - Szótár.net (en-hu)
- subscript operator - Sztaki (en-hu)
- subscript operator - Merriam–Webster
- subscript operator - Cambridge
- subscript operator - WordNet
- subscript operator - Яндекс (en-ru)
- subscript operator - Google (en-hu)
- subscript operator - Wikidata
- subscript operator - Wikipédia (angol)