16人参与 • 2025-07-16 • C/C++
mdspan
是多维数组视图的一个现代 c++ 抽象,它是 c++23 标准引入的一个重要特性,旨在提供灵活、高效的多维数组操作方式。
mdspan
(multi-dimensional span) 是一个非拥有的多维数组视图,它:
#include <mdspan>
#include <mdspan> #include <vector> #include <iostream> int main() { std::vector<int> data = {1, 2, 3, 4, 5, 6}; // 创建一个 2x3 的 mdspan 视图 std::mdspan mat{data.data(), 2, 3}; // 访问元素 std::cout << mat(1, 2) << '\n'; // 输出 6 }
#include <mdspan> int main() { int data[6] = {1, 2, 3, 4, 5, 6}; // 使用行优先布局 (c风格) std::mdspan mat_c{data, std::extents{2, 3}, std::layout_right{}}; // 使用列优先布局 (fortran风格) std::mdspan mat_f{data, std::extents{2, 3}, std::layout_left{}}; // 自定义跨步布局 std::mdspan mat_stride{data, std::extents{2, 3}, std::layout_stride{std::array{1, 2}}}; }
#include <mdspan> int main() { int data[24]; // 完全静态维度 std::mdspan<int, std::extents<2, 3, 4>> static_span{data}; // 混合静态和动态维度 std::mdspan<int, std::extents<std::dynamic_extent, 3, std::dynamic_extent>> mixed_span{data, 2, 4}; // 完全动态维度 std::mdspan<int, std::extents<std::dynamic_extent, std::dynamic_extent>> dynamic_span{data, 2, 3}; }
#include <mdspan> #include <vector> #include <iostream> template <typename t, typename extsa, typename laya, typename acca, typename extsb, typename layb, typename accb, typename extsc, typename layc, typename accc> void matrix_multiply( std::mdspan<t, extsa, laya, acca> a, std::mdspan<t, extsb, layb, accb> b, std::mdspan<t, extsc, layc, accc> c) { for (size_t i = 0; i < c.extent(0); ++i) { for (size_t j = 0; j < c.extent(1); ++j) { c(i, j) = 0; for (size_t k = 0; k < a.extent(1); ++k) { c(i, j) += a(i, k) * b(k, j); } } } } int main() { std::vector<int> a_data(2*3, 1); // 2x3 矩阵,全1 std::vector<int> b_data(3*4, 2); // 3x4 矩阵,全2 std::vector<int> c_data(2*4); // 2x4 结果矩阵 auto a = std::mdspan(a_data.data(), 2, 3); auto b = std::mdspan(b_data.data(), 3, 4); auto c = std::mdspan(c_data.data(), 2, 4); matrix_multiply(a, b, c); // 输出结果 for (size_t i = 0; i < c.extent(0); ++i) { for (size_t j = 0; j < c.extent(1); ++j) { std::cout << c(i, j) << ' '; } std::cout << '\n'; } }
mdspan
不管理内存,只是视图mdspan
使用期间有效mdspan
为 c++ 中的多维数组操作提供了现代化、高效的解决方案,特别适用于科学计算、图像处理等领域。
到此这篇关于c/c++ 中 mdspan 介绍与使用的文章就介绍到这了,更多相关c++ map使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论