簡體   English   中英

創建一個動態std :: array of std :: array

[英]create a Dynamic std::array of std::array

我的任務要求我創建一個數組數組來存儲一些數據,其中行數是固定的,列將在運行時確定。

如果我使用的是簡單的int數組,那么這將是一個簡單的任務,但是由於必須使用std :: array,我迷路了。

到目前為止我的嘗試

#include<iostream>
#include<array>
using std::array;
int main(){
  array<array<int,1>*,3> x;
  for(size_t i=0;i<3;i++)
      {
        x[i][0]=array<int,3>;
      }
}

導致錯誤

array1.cpp:12:29:錯誤:函數樣式轉換或類型構造x [i] [0] = array的預期'(';; ~~~~~~~~~~~~ ^^ 1錯誤生成。

使用clang ++時

我已經讀過std :: array等效於普通數組,我知道我可以使用向量,但是由於我從一開始就知道有多少行,所以我覺得使用向量是一種浪費,盡管我很樂意與傳統數組相比,增加了std :: array的功能。 我如何實現這一點。

std::array<std::vector<int>,3>是您想要的類型。

std::vector是動態大小的數組。

int main(){
  std::array<std::vector<int>,3> x;
  for(std::size_t i=0;i<3;i++)
  {
    x[i]=std::vector<int>(22);
  }
}

這將創建一個3個“主要”元素數組,其大小為22個“較小”元素。

請注意,column-major和row-major(第一和第二)是慣例。 因此std::vector<std::array<3,int>>是對需求的另一個同等有效的解釋。

如果您被禁止使用std::vector ,那么您將不得不找出一個替代解決方案,可能自己動手。 我建議不要使用unique_ptr<int[]> (或更糟糕的是,原始指針),因為它們不存儲元素的大小。

std::array< std::array<不能在任何一個維度上都是動態的。 std::array是固定大小的。

我的任務要求我創建一個數組數組來存儲一些數據,其中行數是固定的,列將在運行時確定。

聽起來您的任務需要使用矩陣類。 boost::numeric::ublas::matrix

使用矩陣類的好處是,在內部它使用一個動態數組來最小化存儲開銷。

如果您將此編碼為練習,請創建自己的矩陣類。 否則,請使用現有的。

暫無
暫無

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

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