簡體   English   中英

3D 向量與 3D 不同大小數組的速度

[英]Speeds of 3D Vector Versus 3D Array of Varying Size

我正在為基於文本的游戲中的角色設計一個動態傷害框,它可以捕捉武器向他們揮動的命中(或未命中)的位置。 然后將命中的位置(指數)和傷害(大小)轉化為角色相應肢體健康變量的減少。 我的想法是最好使用帶有一些 3D 向量/數組成員的 class 來實現這個傷害箱。

當然,對於不同大小的敵人,我可能希望 3D 容器的不同尺寸,但我知道尺寸通常在初始化時確定。 所以這是我的問題:

使用 C 風格的動態數組會更有效嗎,我可以在參數化構造函數中決定和分配它的大小,就像這樣?

class hurtBox {
 private:
   int ***hurtBoxMatrix;
 public:
   hurtBox(int l, int w, int h) {
     hurtBoxMatrix = new int**[l];
     for (int i = 0; i < l; i++) {
       hurtBoxMatrix[i] = new int*[w];
       for (int j = 0; j < w; j++) {
         hurtBoxMatrix[i][j] = new int[h] ();
       }
     }
   }
};

或者,我將元素推入到我想要的尺寸的向量是否足夠?

class hurtBox {
 private:
   vector<vector<vector<int>>> hurtBoxMatrix;
 public:
   hurtBox(int l, int w, int h) {
     for (int i = 0; i < l; i++) {
       hurtBoxMatrix.push_back(vector<vector<int>>);
       for (int j = 0; j < w; j++) {
         hurtBoxMatrix[i].push_back(vector<int>);
         for (int k = 0; k < h; k++) {
           hurtBoxMatrix[i][j].push_back(0);
         }
       }
     } 
   }
};

我想是前者,因為第一次分配是恆定的時間,對吧? 有沒有比這兩種方法更好的方法?

提前致謝。

您最好在一次分配中簡單地分配 3D 數組,並使用索引來訪問元素。 然后可以在 std::vector 的構造函數中處理 std::vector 存儲的分配。

一般來說,最好避免:

  1. 多重分配
  2. 反復調用 push_back
class hurtBox {
 private:
   vector<int> hurtBoxMatrix;
   int m_l;
   int m_w;
   int m_h;
 public:
   hurtBox(int l, int w, int h) 
      : hurtBoxMatrix(l * w * h), m_l(l), m_w(w), m_h(h) {}

   int& operator (int i, int j, int k) {
     return hurtBoxMatrix[ I*m_w*m_h + j*m_w + k ];
   }
   const int operator (int i, int j, int k) const {
     return hurtBoxMatrix[ i*m_w*m_h + j*m_w + k ];
   }
};

暫無
暫無

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

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