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

C++?Boost?MultiArray簡(jiǎn)化使用多維數(shù)組庫(kù)

 更新時(shí)間:2022年11月02日 15:09:54   作者:無(wú)水先生  
Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱

一、介紹Boost.MultiArray

Boost.MultiArray

Boost.MultiArray 是一個(gè)簡(jiǎn)化使用多維數(shù)組的庫(kù)。最重要的優(yōu)點(diǎn)是多維數(shù)組可以像標(biāo)準(zhǔn)庫(kù)中的容器一樣使用。例如,有一些成員函數(shù),例如 begin() 和 end(),讓您可以通過(guò)迭代器訪問(wèn)多維數(shù)組中的元素。迭代器比通常用于 C 數(shù)組的指針更易于使用,尤其是對(duì)于具有多個(gè)維度的數(shù)組。

二、示例

示例 19.1。帶有 boost::multi_array 的一維數(shù)組

#include <boost/multi_array.hpp>
#include <iostream>
int main()
{
  boost::multi_array<char, 1> a{boost::extents[6]};
  a[0] = 'B';
  a[1] = 'o';
  a[2] = 'o';
  a[3] = 's';
  a[4] = 't';
  a[5] = '\0';
  std::cout << a.origin() << '\n';
}

Boost.MultiArray 提供類 boost::multi_array 來(lái)創(chuàng)建數(shù)組。這是提供的最重要的類。它在 boost/multi_array.hpp 中定義。

boost::multi_array 是一個(gè)需要兩個(gè)參數(shù)的模板:第一個(gè)參數(shù)是要存儲(chǔ)在數(shù)組中的元素的類型。第二個(gè)參數(shù)確定數(shù)組應(yīng)該有多少維。

第二個(gè)參數(shù)只設(shè)置維度的數(shù)量,而不是每個(gè)維度中的元素?cái)?shù)量。因此,在示例 19.1 中,a 是一維數(shù)組。

維度中的元素?cái)?shù)量是在運(yùn)行時(shí)設(shè)置的。示例 19.1 使用全局對(duì)象 boost::extents 來(lái)設(shè)置維度大小。該對(duì)象被傳遞給 a 的構(gòu)造函數(shù)。

boost::multi_array 類型的對(duì)象可以像普通的 C 數(shù)組一樣使用。通過(guò)將索引傳遞給 operator[] 來(lái)訪問(wèn)元素。示例 19.1 將五個(gè)字母和一個(gè)空字符存儲(chǔ)在 a - 一個(gè)包含六個(gè)元素的一維數(shù)組中。 origin() 返回指向第一個(gè)元素的指針。該示例使用此指針將存儲(chǔ)在數(shù)組中的單詞 -Boost - 寫(xiě)入標(biāo)準(zhǔn)輸出。

與標(biāo)準(zhǔn)庫(kù)中的容器不同,operator[] 檢查索引是否有效。如果索引無(wú)效,程序?qū)⑹褂?std::abort() 退出。如果您不想檢查索引的有效性,請(qǐng)?jiān)诎?boost/multi_array.hpp 之前定義宏 BOOST_DISABLE_ASSERTS。

示例 19.2。二維數(shù)組的視圖和子數(shù)組

#include <boost/multi_array.hpp>
#include <algorithm>
#include <iostream>
#include <cstring>
int main()
{
  boost::multi_array<char, 2> a{boost::extents[2][6]};
  typedef boost::multi_array<char, 2>::array_view<1>::type array_view;
  typedef boost::multi_array_types::index_range range;
  array_view view = a[boost::indices[0][range{0, 5}]];
  std::memcpy(view.origin(), "tsooB", 6);
  std::reverse(view.begin(), view.end());
  std::cout << view.origin() << '\n';
  boost::multi_array<char, 2>::reference subarray = a[1];
  std::memcpy(subarray.origin(), "C++", 4);
  std::cout << subarray.origin() << '\n';
}

Example19.2

example19.2 創(chuàng)建一個(gè)二維數(shù)組。第一個(gè)維度中的元素?cái)?shù)設(shè)置為 2,第二個(gè)維度中的元素?cái)?shù)設(shè)置為 6。將數(shù)組視為具有兩行六列的表。

表的第一行將包含單詞 Boost。由于這個(gè)詞只需要存儲(chǔ)五個(gè)字母,因此創(chuàng)建了一個(gè)視圖,該視圖正好跨越數(shù)組的五個(gè)元素。

基于類 boost::multi_array::array_view 的視圖允許您訪問(wèn)數(shù)組的一部分并將該部分視為單獨(dú)的數(shù)組。

boost::multi_array::array_view 是一個(gè)模板,它將視圖中的維數(shù)作為模板參數(shù)。在示例 19.2 中,視圖的維數(shù)為 1。由于數(shù)組 a 有兩個(gè)維度,因此忽略了一個(gè)維度。為了省去Boost這個(gè)詞,一維數(shù)組就足夠了;更多的維度會(huì)令人困惑。

與 boost::multi_array 一樣,維數(shù)作為模板參數(shù)傳入,每個(gè)維的大小在運(yùn)行時(shí)設(shè)置。但是,對(duì)于 boost::multi_array::array_view,這不是通過(guò) boost::extents 完成的。相反,它是通過(guò) boost::indices 完成的,這是 Boost.MultiArray 提供的另一個(gè)全局對(duì)象。

與 boost::extents 一樣,索引必須傳遞給 boost::indices。雖然只能將數(shù)字傳遞給 boost::extents,但 boost::indices 也接受范圍。這些是使用 boost::multi_array_types::index_range 定義的。

在示例 19.2 中,傳遞給 boost::indices 的第一個(gè)參數(shù)不是范圍,而是數(shù)字 0。傳遞數(shù)字時(shí),您不能使用 boost::multi_array_types::index_range。在示例中,視圖將采用 a 的第一個(gè)維度——索引為 0 的維度。

對(duì)于第二個(gè)參數(shù),boost::multi_array_types::index_range 用于定義范圍。通過(guò)將 0 和 5 傳遞給構(gòu)造函數(shù),a 的第一個(gè)維度的前五個(gè)元素可用。范圍從索引 0 開(kāi)始,到索引 5 結(jié)束——不包括索引 5 處的元素。第一維中的第六個(gè)元素被忽略。

因此,視圖是一個(gè)由五個(gè)元素組成的一維數(shù)組——a 的第一行中的前五個(gè)元素。當(dāng)訪問(wèn)視圖以使用 std::memcpy() 復(fù)制字符串并使用 std::reverse() 反轉(zhuǎn)元素時(shí),這種關(guān)系無(wú)關(guān)緊要。創(chuàng)建視圖后,它就像一個(gè)具有五個(gè)元素的獨(dú)立數(shù)組。

當(dāng)對(duì) boost::multi_array 類型的數(shù)組調(diào)用 operator[] 時(shí),返回值取決于

方面。在示例 19.1 中,運(yùn)算符返回 char 元素,因?yàn)樵L問(wèn)的數(shù)組是一維的。

在示例 19.2 中,a 是一個(gè)二維數(shù)組。因此,operator[] 返回子數(shù)組而不是 char 元素。因?yàn)樽訑?shù)組的類型不是公開(kāi)的,所以必須使用 boost::multi_array::reference。此類型與 boost::multi_array::array_view 不同,即使子數(shù)組的行為類似于視圖。視圖必須明確定義并且可以跨越數(shù)組的任意部分,而子數(shù)組由 operator[] 自動(dòng)返回并跨越每個(gè)維度中的所有元素。

示例 19.3。使用 boost::multi_array_ref 包裝 C 數(shù)組

#include <boost/multi_array.hpp>
#include <algorithm>
#include <iostream>
#include <cstring>
int main()
{
  char c[12] =
  {
    't', 's', 'o', 'o', 'B', '\0',
    'C', '+', '+', '\0', '\0', '\0'
  };
  boost::multi_array_ref<char, 2> a{c, boost::extents[2][6]};
  typedef boost::multi_array<char, 2>::array_view<1>::type array_view;
  typedef boost::multi_array_types::index_range range;
  array_view view = a[boost::indices[0][range{0, 5}]];
  std::reverse(view.begin(), view.end());
  std::cout << view.origin() << '\n';
  boost::multi_array<char, 2>::reference subarray = a[1];
  std::cout << subarray.origin() << '\n';
}

類 boost::multi_array_ref 包裝了一個(gè)現(xiàn)有的 C 數(shù)組。在示例 19.3 中,a 提供與 boost::multi_array 相同的接口,但不分配內(nèi)存。使用 boost::multi_array_ref,一個(gè) C 數(shù)組——不管它有多少維——都可以被視為一個(gè) boost::multi_array 類型的多維數(shù)組。 C 數(shù)組只需要作為附加參數(shù)添加到構(gòu)造函數(shù)中。

Boost.MultiArray 還提供了 boost::const_multi_array_ref 類,它將 C 數(shù)組視為常量多維數(shù)組。

到此這篇關(guān)于C++ Boost MultiArray簡(jiǎn)化使用多維數(shù)組庫(kù)的文章就介紹到這了,更多相關(guān)C++ Boost MultiArray內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++函數(shù)模板與類模板相同與不同介紹

    C++函數(shù)模板與類模板相同與不同介紹

    C++語(yǔ)言的模板技術(shù)包括函數(shù)模板和類模板,模板技術(shù)是一種代碼重用技術(shù),函數(shù)和類是C++語(yǔ)言中兩種主要的重用代碼形式,這篇文章主要介紹了C++函數(shù)模板和類模板,需要的朋友可以參考下
    2022-08-08
  • 一篇文章帶你了解C語(yǔ)言中volatile關(guān)鍵字

    一篇文章帶你了解C語(yǔ)言中volatile關(guān)鍵字

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中volatile關(guān)鍵字,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • C++中自定義sleep、條件變量sleep實(shí)例

    C++中自定義sleep、條件變量sleep實(shí)例

    這篇文章主要介紹了C++中自定義sleep、條件變量sleep實(shí)例,本文直接給出實(shí)例代碼并講解了功能作用和使用方法,需要的朋友可以參考下
    2015-03-03
  • C語(yǔ)言中指針的加減運(yùn)算方法示例

    C語(yǔ)言中指針的加減運(yùn)算方法示例

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中指針的加減運(yùn)算的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • C++控制臺(tái)實(shí)現(xiàn)隨機(jī)生成路徑迷宮游戲

    C++控制臺(tái)實(shí)現(xiàn)隨機(jī)生成路徑迷宮游戲

    這篇文章主要為大家詳細(xì)介紹了C++控制臺(tái)實(shí)現(xiàn)隨機(jī)生成路徑迷宮游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之雙鏈表&循環(huán)鏈表&靜態(tài)鏈表詳解

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之雙鏈表&循環(huán)鏈表&靜態(tài)鏈表詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中雙鏈表&循環(huán)鏈表&靜態(tài)鏈表的原理與使用,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-09-09
  • C語(yǔ)言 以數(shù)據(jù)塊的形式讀寫(xiě)文件詳解及實(shí)現(xiàn)代碼

    C語(yǔ)言 以數(shù)據(jù)塊的形式讀寫(xiě)文件詳解及實(shí)現(xiàn)代碼

    本文主要介紹 C語(yǔ)言 以數(shù)據(jù)塊的形式讀寫(xiě)文件,這里對(duì)相關(guān)知識(shí)資料做了整理,并附代碼示例,以便大家學(xué)習(xí)參考,有學(xué)習(xí)此部分知識(shí)的朋友可以參考下
    2016-08-08
  • OpenCV利用K-means實(shí)現(xiàn)根據(jù)顏色進(jìn)行圖像分割

    OpenCV利用K-means實(shí)現(xiàn)根據(jù)顏色進(jìn)行圖像分割

    K-means是一種經(jīng)典的無(wú)監(jiān)督聚類算法---不需要人工干預(yù)。本文將通過(guò)K-means算法實(shí)現(xiàn)根據(jù)顏色進(jìn)行圖像分割的效果,感興趣的小伙伴可以嘗試一下
    2022-10-10
  • C++學(xué)習(xí)心得之掃雷游戲

    C++學(xué)習(xí)心得之掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C++學(xué)習(xí)心得之掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • c++中八大排序算法

    c++中八大排序算法

    本篇文章主要介紹了八大排序算法,詳細(xì)的介紹了八個(gè)算法思想,實(shí)現(xiàn)代碼,穩(wěn)定性,時(shí)間復(fù)雜度等,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11

最新評(píng)論

灵寿县| 惠安县| 客服| 巴中市| 神木县| 公安县| 修水县| 阿荣旗| 长白| 秭归县| 杭锦旗| 佛山市| 台南市| 大荔县| 西峡县| 资源县| 碌曲县| 开原市| 封开县| 陆丰市| 丰都县| 罗定市| 隆回县| 达州市| 许昌县| 台江县| 拜城县| 安平县| 周至县| 湄潭县| 广东省| 临西县| 吉林省| 屯留县| 嘉善县| 新余市| 贵溪市| 锦屏县| 禄丰县| 灵川县| 洛浦县|