當前位置:
首頁 > 知識 > c加加中 的高維數組

c加加中 的高維數組



c加加中 的高維數組



2017/05/14 18:41:22

數值計算中,常常需要操作高維數組,C++ 很容易寫出來佔用內存多,而且速度慢的程序。


#include using namespace std;class Video { public:


我碰到過一些真實的,代碼量很大的項目,至少三次看到上面這種模式。這種方法佔用內存多,速度慢。


可以用一維數組模擬高維數組。

#include using namespace std;class Video { public:


我們看看速度


+ c++ -std=c++11 high_dim_array_1.cpp


後者快了 14 倍。


我們分析一下內存使用。對於數據來說,二者是一樣的。但是第一種方案,額外存儲了很多內存指針。

new char***[num_of_channels];


需要 10 個指針。


同樣道理,寬度層,需要 10 * 1920 個指針


高度層,需要 10*1920*1080 個指針


最後一層,沒有額外的指針空間,因為這些就是原始數據了。

可以看到,每個指針 8 個位元組(64位機器),我們額外需要大約 160M+ 的內存,存儲間接指針。


buf_[c][w][h][r] = 0.0;buf_[c*width*height*num_of_colors + w*height*num_of_colors + h*num_of_colors + r] = 0.0;


這兩個相比,前者看起來更加乾淨。但是,我們很容易做做操作符重載


char& operator()(size_t c, size_t w, size_t h, size_t r){ return buf_[c*width*height*num_of_colors + w*height*num_of_colors + h*num_of_colors + r];

這樣我們就可以使用下面的語法。


(*this)(c,w,h,r) = 0.0;


這裡淡淡的吐槽一下 c++ ,


也許更好,可惜 c++ 的對方括弧的操作符重載,只允許一個參數。


如果非要用第一種語法形式


(*this)[c][w][h][r]


的話,


(*this)[c]


返回一個對象,依次產生三個臨時對象。


想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 C加加 的精彩文章:

C語言-掃雷遊戲加強版本
C語言中動態數組的實現
C語言學習中必不可少的循環嵌套
C語言-搶火車票軟體原理及筆記,大神執筆值得分享
C語言代碼訓練 精講

TAG:C加加 |