[英]Is it bad practice to use multi-dimensional arrays in C/C++?
一些程序員似乎非常討厭他們,而其他程序員似乎認為他們很好。 我知道任何可以對多維數組做的事情也可以用於常規數組,所以它們在功能上是等價的。 使用多維數組是不好的做法,還是無關緊要?
您是否需要在提前知道尺寸的情況下存儲多維數據? 如果是這樣,請使用多維數組。
如果您不提前知道維度(即,您將不得不動態分配數組),那么您要么要么
這取決於具體的用例,但根據經驗,我幾乎總是更喜歡前者,因為它減少了內存管理的麻煩和更少的堆分配。 兩種方法的復雜性隨着維數的增加而增加,但是,在我看來,由於額外的間接水平,后一種方法的增長速度要快得多。
多維數組陣列對Vector<Vector<>>
優點
缺點:
基本上,它歸結為缺乏對我的界限檢查。
與Vector<Vector<>>
相比,多維數組有以下優點:
沒有它,你會如何實現我最喜歡的算法 ?
好吧,在C ++中我不喜歡多維數組,因為它們應該用std::vector<std::vector<t> >
替換。 如果你想表示一個std::vector<std::basic_string<t> >
它們也特別重要。
多維數組是如此簡單,我最驚訝的是原始數據。 但是,使用單個維度的設計可能比使用多維度的設計更好,所有其他條件相同。
可以將多維數據存儲在單個數據陣列中,但您必須自己跟蹤索引。 多維數組實際上作為單維數組存儲在存儲器中,其語法支持將該數據表示為多維的。
如果您正在使用多維數據,那么我覺得最適合為作業選擇正確的工具(多維數組)。
如果多維索引計算錯誤, std::valarray
與std::slice
是標准的抽象。
我可以推薦Boost.MultiArray。 Boost.MultiArray提供了通用的N維數組概念定義和該接口的通用實現。
http://www.boost.org/doc/libs/1_42_0/libs/multi_array/doc/index.html
我知道任何可以對多維數組做的事情也可以用於常規數組
我認為這不完全准確。 我們需要一個指針數組來存儲一些基本的名稱列表,然后對它進行排序。 或指向存儲可變長度字符串的指針,然后指向此類字符串的列表。 由於原始問題本身僅提到數組,因此無法看到如何在常規數組中輕松完成這些問題。 請考慮不僅將字符串存儲在一維數組中(可能使用某種分隔符),還要執行排序等操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.