C 怎麼實現效率盡可能高地帶邊界檢查的多維陣列模板類

時間 2021-05-31 09:43:31

1樓:tearshark

我看大家走入了乙個誤區。認為多維的訪問一定要通過多個引數的operator(),或者多次的operator來訪問。這導致設計的時候縮手縮腳。

其實,完全可以做乙個index類嘛:

template

struct index{

size_t idx[Dimension];

然後訪問的時候,通過過載operator函式:

T & operator(const index & idx);

有了這個思路了,tensor也就好定義了:

template

struct tensor{

T * data;

index extent;

2樓:

多維陣列用線性空間連續儲存

並用乙個陣列存每個維度的size

返回資料的view,這時基於size陣列檢查。

view提供value方法返回資料

view 返回的還是view。

3樓:Milo Yip

首先,在二維矩形陣列中,更好的記憶體分配方法是使用一維陣列,最終用 data[y * m + x] 去訪問。在operator 返回的臨時物件中,記錄p = &data[y * m],臨時物件的 operator 再返回 p[x]。

然後,應該比較容易考慮怎樣擴充套件至多維了。

P. S. 一般建議用 size_t 作為大小及索引的型別。

4樓:暮無井見鈴

最簡單的方式就是 std::vector 巢狀,用 at 訪問。

另外有返回多維切片引用的方案。詳見 Boost.MultiArray 、 multi_span 、 mdspan 等。這些工具會簡化以分配一段連續記憶體實現多維動態組的過程。

5樓:陳碩

先說你現在做到哪一步了?繼續前進遇到了什麼困難?有沒有調研過開源的專案?

暫時拋開「效率盡可能高」這個要求,你能不能自己實現帶邊界檢查的能用 操作符訪問的多維陣列模板?

你想要的這個多維陣列模板的模板引數有哪些?

元素型別、維數、每一維的大小這些都是模板引數嗎?

c語言如何實現盡可能長的位數的高精度計算

灰機 第一,無限是不可能無限的,你如果學過高等數學就知道,無限是永遠達不到的乙個狀態。第二,高精度是有限制的,乙個計算能計算的能力是有限的,不能能達到多高的精度。如果不理解,你可以查一下怎麼比較乙個浮點數等於0,是不是float a 0? 遠見望遠 瀉藥,其他回答從常規思路已經說的很全面了,我從摳字...

移民後如何盡可能地實現財富自由?

麥小麥 才讀大一就規劃那麼遠!還是好好把專業和語言學好,找到工作再談其他吧。有的人雖說移民了但找乙份穩定的工作都難,財富自由不切實際。 LeeLi 實現財富自由的方式有三種第一你有固定資產美國哪個城市你沒說如果是波士頓洛杉磯這種國內房子一賣美國當地買個學校附近公寓如果有全款實力就更好了租金的話一年三...

請問,怎麼中彩票才能盡可能中大獎?

徐祥磊 第一點,保持好心態。買彩票的心態還是很重要的,心態可以影響到我們的日常生活的方方面面。而買彩票其實就是一種賭博,無論是輸還是贏,決定權都不在你的手上,所以你能做的就是放寬心,服從 命運的安排。第二點,捉住靈感。很多中過大獎的人都說,靈感是很重要的。買彩票選數字時,要跟著自己的心走,有時候憑直...