簡體   English   中英

在C / C ++中使用多維數組是不好的做法嗎?

[英]Is it bad practice to use multi-dimensional arrays in C/C++?

一些程序員似乎非常討厭他們,而其他程序員似乎認為他們很好。 我知道任何可以對多維數組做的事情也可以用於常規數組,所以它們在功能上是等價的。 使用多維數組是不好的做法,還是無關緊要?

您是否需要在提前知道尺寸的情況下存儲多維數據? 如果是這樣,請使用多維數組。

如果您不提前知道維度(即,您將不得不動態分配數組),那么您要么要么

  • 分配一維數組並使用索引算法模擬n維數組,或
  • 分配一個指向數組元素的指針數組,以獲得實際的多維數組語義

這取決於具體的用例,但根據經驗,我幾乎總是更喜歡前者,因為它減少了內存管理的麻煩和更少的堆分配。 兩種方法的復雜性隨着維數的增加而增加,但是,在我看來,由於額外的間接水平,后一種方法的增長速度要快得多。

多維數組陣列對Vector<Vector<>>優點

  1. 易於輸入[] []
  2. C兼容。
  3. 簡單地從概念上理解它在做什么。

缺點:

  1. 沒有容易檢測到邊界檢查。 限制在外括號的末尾通常溢出到由內括號分配的內存中,使得這些類型的錯誤成為跟蹤的真正痛苦。
  2. 鋸齒狀陣列需要注意設置。 矢量模式很容易。
  3. 多維數據集陣列不僅僅是雙指針,使得正確傳遞函數變得很麻煩。 大多數時候,我已經看到它們只是作為原始地址傳遞給雙指針,這會破壞編譯器為您做的內在數學運算。

基本上,它歸結為缺乏對我的界限檢查。

Vector<Vector<>>相比,多維數組有以下優點:

  • 它們很容易理解。
  • 可以非常容易地搜索和分類元素。
  • 它們與C兼容
  • 它們很容易打字。

沒有它,你會如何實現我最喜歡的算法

好吧,在C ++中我不喜歡多維數組,因為它們應該用std::vector<std::vector<t> >替換。 如果你想表示一個std::vector<std::basic_string<t> >它們也特別重要。

多維數組是如此簡單,我最驚訝的是原始數據。 但是,使用單個維度的設計可能比使用多維度的設計更好,所有其他條件相同。

可以將多維數據存儲在單個數據陣列中,但您必須自己跟蹤索引。 多維數組實際上作為單維數組存儲在存儲器中,其語法支持將該數據表示為多維的。

如果您正在使用多維數據,那么我覺得最適合為作業選擇正確的工具(多維數組)。

如果多維索引計算錯誤, std::valarraystd::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.

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