代码之家  ›  专栏  ›  技术社区  ›  Niteya Shah

创建std::array的动态std::array

  •  -1
  • Niteya Shah  · 技术社区  · 7 年前

    如果我使用的是一个简单的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]=数组;

    使用叮当声时++

    我知道我可以使用向量,但因为我从一开始就知道我有多少行,我觉得使用向量是一种浪费,而与传统数组相比,我更喜欢std::array的附加功能。我如何实现这一点。

    2 回复  |  直到 7 年前
        1
  •  6
  •   Yakk - Adam Nevraumont    7 年前

    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);
      }
    }
    

    这将创建一个大小为22“次”的3“主”元素数组。

    std::vector<std::array<3,int>> 是对要求的另一种同样有效的解释。

    如果你被禁止使用 ,您将必须找到一个替代解决方案,可能是您自己的解决方案。我建议不要这样做 unique_ptr<int[]> (或者更糟的是,原始指针),因为它们不存储元素的大小。

    A. std::array< std::array< std::array 是固定大小的。

        2
  •  1
  •   Maxim Egorushkin    7 年前

    我的任务要求我创建一个数组数组来存储一些数据,其中行数是固定的,列数将在运行时确定。

    听起来您的任务需要使用矩阵类。喜欢 boost::numeric::ublas::matrix .

    使用matrix类的好处是,它在内部使用一个动态数组来最小化存储开销。

    如果您将此编码为练习,请创建自己的矩阵类。否则,请使用现有的。