0 Tage Serie
cpp / expert
Snippet

Strided-Array-Zugriff zur Puffer-Navigation

Eine manuelle Implementierung von Strided-Access über ein flaches Array. Dies ist essenziell für die Verarbeitung mehrdimensionaler Daten (wie Bildkanäle oder Matrixspalten), die in einem zusammenhängenden Speicherblock liegen.

snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstddef>
#include <vector>
class StridedView {
int* data;
std::size_t stride;
public:
StridedView(int* ptr, std::size_t s) : data(ptr), stride(s) {}
int& operator[](std::size_t index) {
return data[index * stride];
}
};
int main() {
int raw_data[] = {1, 0, 0, 2, 0, 0, 3, 0, 0};
StridedView view(raw_data, 3);
// view[0] is 1, view[1] is 2, view[2] is 3
}
Erklärung
1
data[index * stride]
Berechnet die effektive Speicheradresse, indem pro logischem Schritt eine feste Anzahl von Elementen übersprungen wird.
2
int* data;
Speichert einen Zeiger auf den Anfang des Puffers für flexibles manuelles Memory-Mapping.