最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

什么是 mdspan

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

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

基本用法

包含頭文件

#include <mdspan>

創(chuàng)建一個(gè) mdspan

#include <mdspan>
#include <vector>
#include <iostream>
int main() {
    std::vector<int> data = {1, 2, 3, 4, 5, 6};
    // 創(chuàng)建一個(gè) 2x3 的 mdspan 視圖
    std::mdspan mat{data.data(), 2, 3};
    // 訪問元素
    std::cout << mat(1, 2) << '\n';  // 輸出 6
}

高級(jí)特性

自定義布局

#include <mdspan>
int main() {
    int data[6] = {1, 2, 3, 4, 5, 6};
    // 使用行優(yōu)先布局 (C風(fēng)格)
    std::mdspan mat_c{data, std::extents{2, 3}, std::layout_right{}};
    // 使用列優(yōu)先布局 (Fortran風(fēng)格)
    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}}};
}

動(dòng)態(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)和動(dòng)態(tài)維度
    std::mdspan<int, std::extents<std::dynamic_extent, 3, std::dynamic_extent>> mixed_span{data, 2, 4};
    // 完全動(dòng)態(tài)維度
    std::mdspan<int, std::extents<std::dynamic_extent, std::dynamic_extent>> dynamic_span{data, 2, 3};
}

實(shí)際應(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)點(diǎn)

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

注意事項(xiàng)

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

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

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

相關(guān)文章

  • 你真的懂C++中的namespace用法

    你真的懂C++中的namespace用法

    命名空間(namespace)為防止名字沖突提供了更加可控的機(jī)制,命名空間分割了全局命名空間,其中每個(gè)命名空間是一個(gè)作用域,今天通過本文給大家分享C++中namespace用法,感興趣的朋友一起看看吧
    2021-06-06
  • 詳解C++賦值操作符重載

    詳解C++賦值操作符重載

    這篇文章主要介紹了C++賦值操作符重載的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • OpenCV繪制正多邊形的方法

    OpenCV繪制正多邊形的方法

    這篇文章主要為大家詳細(xì)介紹了OpenCV繪制正多邊形的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語(yǔ)言中`||`的短路機(jī)制詳解

    C語(yǔ)言中`||`的短路機(jī)制詳解

    在C語(yǔ)言中,邏輯或運(yùn)算符(||)是一種常用的邏輯運(yùn)算符,用于組合多個(gè)條件表達(dá)式,C語(yǔ)言中的邏輯或運(yùn)算符具有短路機(jī)制,這是一種非常重要的概念,本文將深入解釋C語(yǔ)言中的||短路機(jī)制以及其在編程中的應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • C/C++中*和&的用法詳解

    C/C++中*和&的用法詳解

    在本篇文章中我們給大家總結(jié)了C/C++中*和&的用法以及相關(guān)的代碼分享,有興趣的朋友趕緊學(xué)習(xí)下吧。
    2018-03-03
  • C語(yǔ)言中的直接插入排序(帶圖詳細(xì))

    C語(yǔ)言中的直接插入排序(帶圖詳細(xì))

    這篇文章主要介紹了C語(yǔ)言中的直接插入排序(帶圖詳細(xì)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用C語(yǔ)言實(shí)現(xiàn)交換整數(shù)的奇數(shù)位和偶數(shù)位

    使用C語(yǔ)言實(shí)現(xiàn)交換整數(shù)的奇數(shù)位和偶數(shù)位

    在C語(yǔ)言中,要交換一個(gè)整數(shù)的二進(jìn)制位中的奇數(shù)位和偶數(shù)位,重點(diǎn)需要理解位操作,當(dāng)我們談?wù)摱M(jìn)制位的奇數(shù)位和偶數(shù)位時(shí),我們是指從右到左數(shù)的位置,本文給大家介紹了使用C語(yǔ)言代碼實(shí)現(xiàn)將一個(gè)整數(shù)的奇數(shù)位和偶數(shù)位交換,需要的朋友可以參考下
    2025-03-03
  • C語(yǔ)言實(shí)現(xiàn)大整數(shù)加減運(yùn)算詳解

    C語(yǔ)言實(shí)現(xiàn)大整數(shù)加減運(yùn)算詳解

    大數(shù)運(yùn)算,顧名思義,就是很大的數(shù)值的數(shù)進(jìn)行一系列的運(yùn)算。本文通過實(shí)例演示如何進(jìn)行C語(yǔ)言中的大整數(shù)加減運(yùn)算,有需要的可以參考借鑒。
    2016-08-08
  • C語(yǔ)言求解定積分的方法

    C語(yǔ)言求解定積分的方法

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言求解定積分的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Unity3D實(shí)現(xiàn)經(jīng)典小游戲Pacman

    Unity3D實(shí)現(xiàn)經(jīng)典小游戲Pacman

    這篇文章主要介紹了基于Unity3D制作一做個(gè)經(jīng)典小游戲Pacman,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Unity3D有一定的幫助,感興趣的小伙伴可以了解一下
    2021-12-12

最新評(píng)論

兰州市| 启东市| 柳江县| 会理县| 镇雄县| 赤峰市| 资阳市| 卓尼县| 宜兴市| 车致| 珲春市| 大名县| 扬中市| 靖西县| 青铜峡市| 永丰县| 灵璧县| 绥化市| 横峰县| 睢宁县| 南川市| 河曲县| 宽城| 肥乡县| 连城县| 中方县| 鄢陵县| 抚宁县| 孝昌县| 伊春市| 和政县| 姚安县| 巫山县| 青川县| 松桃| 达拉特旗| 石屏县| 江华| 南汇区| 襄城县| 辽阳市|