Ugrás a tartalomhoz

array slicing

A Wikiszótárból, a nyitott szótárból


Főnév

array slicing (tsz. array slicings)

  1. (informatika) Az array slicing (tömbszeletelés) egy olyan művelet, amellyel egy tömb vagy lista egy részét kivághatjuk, azaz egy részhalmazát lekérhetjük. A kifejezés különösen népszerű dinamikus nyelvekben (pl. Python), de C++-ban és C-ben más módszerekkel kell megvalósítani.



🧠 Alapötlet

Array slicing célja:

Kivenni egy tömb vagy lista bizonyos elemeit, egy adott kezdő- és végindex alapján.

Példa (Python):

a = [10, 20, 30, 40, 50]
sliced = a[1:4]  # [20, 30, 40]

📌 Slicing dinamikus nyelvekben

Python

lista = [0, 1, 2, 3, 4, 5]
print(lista[2:5])   # [2, 3, 4]
print(lista[:3])    # [0, 1, 2]
print(lista[::2])   # [0, 2, 4]

Formátum:

lista[start:stop:step]

⚙️ C++ és C – Hogyan lehet megvalósítani?

A C/C++ nem támogatja közvetlenül a slicing szintaxisát (a[1:4]), de implementálható kézzel másolással vagy pointerekkel.

🧾 1. Másolás új tömbbe

int a[] = {10, 20, 30, 40, 50};
int start = 1;
int end = 4;
int size = end - start;

int slice[3]; // VAGY: int* slice = new int[size];
for (int i = 0; i < size; ++i)
    slice[i] = a[start + i];

🧾 2. Pointer alapú szelet

int a[] = {10, 20, 30, 40, 50};
int* slice = &a[1];  // pointer a szelet elejére

for (int i = 0; i < 3; ++i)
    std::cout << slice[i] << ' ';  // 20 30 40

Figyelem: Ez nem másolás, csak mutató az eredeti tömb belsejére. Vigyázni kell az érvényességgel!



🧾 3. std::span – Modern megközelítés (C++20)

A std::span egy nem birtokló nézet egy tömb egy szeletére.

#include <span>
#include <iostream>

void kiir(std::span<int> resz) {
    for (int x : resz)
        std::cout << x << ' ';
}

int main() {
    int a[] = {1, 2, 3, 4, 5};
    std::span<int> s(a + 1, 3);  // 2, 3, 4
    kiir(s);
}

Ez C++-ban a legjobb megoldás slicing-ra, ha van C++20 támogatás.



📦 std::vector slicing

A std::vector sem támogatja közvetlen slicingot, de egyszerűen másolható:

#include <vector>
#include <iostream>

std::vector<int> slice(const std::vector<int>& v, int start, int end) {
    return std::vector<int>(v.begin() + start, v.begin() + end);
}

int main() {
    std::vector<int> v = {10, 20, 30, 40, 50};
    auto s = slice(v, 1, 4);  // {20, 30, 40}
    for (int x : s) std::cout << x << ' ';
}

✅ Összefoglalás

Nyelv Támogatás Megjegyzés
Python Beépített slicing a[start:stop:step] Nagyon rugalmas
C Manuális másolás, pointerek Vigyázni kell a határokkal
C++ std::vector, std::span, kézi megoldás C++20-tól std::span az ideális
Rust, Go, JavaScript Szintaktikus vagy metódus alapú slicing Kényelmes