欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++ 中 mdspan 介紹與使用示例

 更新時間:2025年07月16日 09:56:42   作者:東北豆子哥  
mdspan是C++23引入的多維數(shù)組視圖,不管理內(nèi)存僅提供視圖,支持任意維度和靈活布局,適用于科學計算等領(lǐng)域,其優(yōu)點包括零成本抽象、類型安全和可組合性,但需確保底層數(shù)據(jù)有效且編譯器支持,本文介紹C/C++ 中 mdspan 介紹與使用,感興趣的朋友一起看看吧

C/C++ 中的 mdspan 介紹與使用

mdspan 是多維數(shù)組視圖的一個現(xiàn)代 C++ 抽象,它是 C++23 標準引入的一個重要特性,旨在提供靈活、高效的多維數(shù)組操作方式。

什么是 mdspan

mdspan (Multi-Dimensional Span) 是一個非擁有的多維數(shù)組視圖,它:

  • 不管理內(nèi)存,只提供對現(xiàn)有數(shù)據(jù)的多維視圖
  • 支持任意維度的數(shù)組
  • 提供靈活的內(nèi)存布局描述
  • 是 C++ 標準庫的一部分 (C++23)

基本用法

包含頭文件

#include <mdspan>

創(chuàng)建一個 mdspan

#include <mdspan>
#include <vector>
#include <iostream>
int main() {
    std::vector<int> data = {1, 2, 3, 4, 5, 6};
    // 創(chuàng)建一個 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};
    // 使用行優(yōu)先布局 (C風格)
    std::mdspan mat_c{data, std::extents{2, 3}, std::layout_right{}};
    // 使用列優(yōu)先布局 (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}}};
}

動態(tài)與靜態(tài)維度

#include <mdspan>
int main() {
    int data[24];
    // 完全靜態(tài)維度
    std::mdspan<int, std::extents<2, 3, 4>> static_span{data};
    // 混合靜態(tài)和動態(tài)維度
    std::mdspan<int, std::extents<std::dynamic_extent, 3, std::dynamic_extent>> mixed_span{data, 2, 4};
    // 完全動態(tài)維度
    std::mdspan<int, std::extents<std::dynamic_extent, std::dynamic_extent>> dynamic_span{data, 2, 3};
}

實際應(yīng)用示例

矩陣乘法

#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 結(jié)果矩陣
    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);
    // 輸出結(jié)果
    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';
    }
}

優(yōu)點

  1. 零成本抽象:與原始指針操作性能相當
  2. 類型安全:比原始指針更安全
  3. 靈活性:支持多種內(nèi)存布局
  4. 可組合性:可以與標準庫其他組件良好配合

注意事項

  1. mdspan 不管理內(nèi)存,只是視圖
  2. 需要確保底層數(shù)據(jù)在 mdspan 使用期間有效
  3. C++23 特性,需要較新的編譯器支持

mdspan 為 C++ 中的多維數(shù)組操作提供了現(xiàn)代化、高效的解決方案,特別適用于科學計算、圖像處理等領(lǐng)域。

到此這篇關(guān)于C/C++ 中 mdspan 介紹與使用的文章就介紹到這了,更多相關(guān)c++ map使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實現(xiàn)LeetCode(111.二叉樹的最小深度)

    C++實現(xiàn)LeetCode(111.二叉樹的最小深度)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(111.二叉樹的最小深度),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)順序循環(huán)隊列實例

    C語言實現(xiàn)順序循環(huán)隊列實例

    大家好,本篇文章主要講的是C語言實現(xiàn)順序循環(huán)隊列實例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C語言寫一個散列表

    C語言寫一個散列表

    這篇文章主要介紹了C語言寫一個散列表,散列表,就是下標可以為字母的數(shù)組。更多內(nèi)容和小編一起學習下面內(nèi)容吧
    2022-01-01
  • C++中this指針的理解與作用詳解

    C++中this指針的理解與作用詳解

    這篇文章主要給大家介紹了關(guān)于C++中this指針的理解與作用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • C語言實現(xiàn)求最大公約數(shù)的三種方法

    C語言實現(xiàn)求最大公約數(shù)的三種方法

    最大公因數(shù),也稱最大公約數(shù)、最大公因子,指兩個或多個整數(shù)共有約數(shù)中最大的一個。本文將為大家介紹三種方法來實現(xiàn)求解兩個正整數(shù)的最大公約數(shù),需要的可以參考一下
    2021-12-12
  • C/C++實現(xiàn)八大排序算法匯總

    C/C++實現(xiàn)八大排序算法匯總

    這篇文章主要為大家詳細介紹了C/C++實現(xiàn)八大排序算法匯總,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 理解C++編程中的std::function函數(shù)封裝

    理解C++編程中的std::function函數(shù)封裝

    這篇文章主要介紹了理解C++編程中的std::function函數(shù)封裝,std::function是C++11標準中的新特性,需要的朋友可以參考下
    2016-04-04
  • C語言中K-means算法實現(xiàn)代碼

    C語言中K-means算法實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了C語言中K-means算法的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C語言實現(xiàn)十六進制轉(zhuǎn)換為十進制的方法詳解

    C語言實現(xiàn)十六進制轉(zhuǎn)換為十進制的方法詳解

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)十六進制轉(zhuǎn)換為十進制的方法,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-11-11
  • C語言結(jié)構(gòu)體中內(nèi)存對齊的問題理解

    C語言結(jié)構(gòu)體中內(nèi)存對齊的問題理解

    內(nèi)存對齊”應(yīng)該是編譯器的“管轄范圍”。編譯器為程序中的每個“數(shù)據(jù)單元”安排在適當?shù)奈恢蒙?。但是C語言的一個特點就是太靈活,太強大,它允許你干預(yù)“內(nèi)存對齊”。如果你想了解更加底層的秘密,“內(nèi)存對齊”對你就不應(yīng)該再模糊了
    2022-02-02

最新評論