În calculul științific, procesarea de imagini și grafica 3D, matricile multidimensionale erau reprezentate anterior fie prin vectori de vectori ineficienți (std::vector<std::vector<int>> – ce fragmentau memoria pe heap și distrugeau cache-ul CPU), fie prin calcul manual greoi de indici (buffer[i * coloane + j]). std::mdspan adăugat în C++23 oferă o vedere multidimensională cu cost zero peste orice secvență contiguă de memorie, suportând sintaxa modernă de indexare multidimensională matrice[i, j, k].
Manipularea unei matrici 2D peste un buffer unidimensional
#include <mdspan>
#include <vector>
#include <print>
int main() {
constexpr size_t LINII = 3;
constexpr size_t COLOANE = 4;
// Buffer contiguu de 12 elemente pe stivă/heap:
std::vector<int> date(LINII * COLOANE, 0);
// Creăm o vedere 2D (mdspan nu deține memoria, doar o mapează):
std::mdspan matrice(date.data(), LINII, COLOANE);
// Indexare curată cu operatorul [] din C++23:
matrice[0, 0] = 100;
matrice[1, 2] = 42;
matrice[2, 3] = 999;
std::println("Valoare la [1, 2]: {}", matrice[1, 2]);
// Afișarea întregii matrici:
for (size_t i = 0; i < matrice.extent(0); ++i) {
for (size_t j = 0; j < matrice.extent(1); ++j) {
std::print("{:>4} ", matrice[i, j]);
}
std::println("");
}
return 0;
}