array slicing (tsz. array slicings)
Array slicing célja:
Kivenni egy tömb vagy lista bizonyos elemeit, egy adott kezdő- és végindex alapján.
Példa (Python):
a =
sliced = a #
lista =
print(lista) #
print(lista) #
print(lista) #
Formátum:
lista
A C/C++ nem támogatja közvetlenül a slicing szintaxisát (a
), de implementálható kézzel másolással vagy pointerekkel.
int a = {10, 20, 30, 40, 50};
int start = 1;
int end = 4;
int size = end - start;
int slice; // VAGY: int* slice = new int;
for (int i = 0; i < size; ++i)
slice = a;
int a = {10, 20, 30, 40, 50};
int* slice = &a; // pointer a szelet elejére
for (int i = 0; i < 3; ++i)
std::cout << slice << ' '; // 20 30 40
Figyelem: Ez nem másolás, csak mutató az eredeti tömb belsejére. Vigyázni kell az érvényességgel!
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
slicingA 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 << ' ';
}
Nyelv | Támogatás | Megjegyzés |
---|---|---|
Python | Beépített slicing a
|
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 |