簡體   English   中英

為什么在C ++中使用boost multi_array索引類型來索引boost數組?

[英]Why use boost multi_array index type for indexing boost arrays in C++?

在boost multi_array 文檔的第一個示例中,聲明了索引類型,即viz。

typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;

然后可以將其用於遍歷數組索引,例如

array_type someArray(boost::extents[3][3][3]);
for(index i = 0; i < 3; i++) 
  someArray[0][0][i] = i;

這可能是一個簡單的問題,但是我無法找到關於為什么應使用此索引的明確記錄,而不是說一個unsigned int

您一般不能使用無符號整數,因為某些尺寸的基數很可能是負數。

因此,如果編寫通用代碼,則最好從提供的數組中推斷出index類型。

文件說

index

  • 這是用於對A進行索引的帶符號整數類型。它也用於表示跨步和索引基數。

基於“正確”索引的循環看起來類似於:

生活在Coliru

#include <boost/multi_array.hpp>
#include <iostream>

int main() {
    using A = boost::multi_array<double, 3>;
    A arr(boost::extents[3][2][4]);
    std::iota(arr.data(), arr.data()+arr.num_elements(), 1.); // fill with increasing numbers

    arr.reindex(-17);

    for (A::index i = arr.index_bases()[0]; i < arr.index_bases()[0]+A::index(arr.shape()[0]); ++i) {
        for (A::index j = arr.index_bases()[1]; j < arr.index_bases()[1]+A::index(arr.shape()[1]); ++j) {
            for (A::index k = arr.index_bases()[2]; k < arr.index_bases()[2]+A::index(arr.shape()[2]); ++k) {
                std::cout << "(" << i << "," << j << "," << k << "): " << arr[i][j][k] << "\n";
            }
        }
    }
}

印花

(-17,-17,-17): 1
(-17,-17,-16): 2
(-17,-17,-15): 3
(-17,-17,-14): 4
(-17,-16,-17): 5
(-17,-16,-16): 6
(-17,-16,-15): 7
(-17,-16,-14): 8
(-16,-17,-17): 9
(-16,-17,-16): 10
(-16,-17,-15): 11
(-16,-17,-14): 12
(-16,-16,-17): 13
(-16,-16,-16): 14
(-16,-16,-15): 15
(-16,-16,-14): 16
(-15,-17,-17): 17
(-15,-17,-16): 18
(-15,-17,-15): 19
(-15,-17,-14): 20
(-15,-16,-17): 21
(-15,-16,-16): 22
(-15,-16,-15): 23
(-15,-16,-14): 24

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM