【问题标题】:Trying to create an array of vectors (Templatized Vector class created by me)尝试创建向量数组(我创建的模板化向量类)
【发布时间】:2018-08-03 08:30:25
【问题描述】:

所以正如标题所提到的,我正在尝试创建一个向量数组,向量不是 STL,我创建了自己的最小类 Vector.h,它基本上是一个可以容纳任何类型的动态数组(模板化)

我正在从文件中读取大量数据并将每一行分隔成有意义的属性,并将其存储到我制作的向量中。

Vector<string> myDateVector;
Vector<string> myTimeVector;
Vector<float> mySolarRadiationVector;
Vector<float> myWindSpeedVector;
Vector<float> myAirTempVector;

现在我想创建一个由这些向量组成的数组,其中数组的每个索引都包含一个指向所有这些向量中数据的指针,如 array[1] 有 myDateVector.get(1);时间(1)太阳辐射(1)风速(1)空气温度(1)。

非常迷失现在该做什么,对 C++ 非常陌生,并且在研究 STL 向量和与我的工作无关的东西后,我解释了这让我更加困惑,因此我发现有必要发布这个。我真的希望这没有被标记为重复!

【问题讨论】:

    标签: c++ arrays class vector dynamic


    【解决方案1】:

    如果我正确理解了您的问题,您希望将所有这些向量存储在一个数组中。

    由于某些原因,这是不可能的。数组的所有元素必须具有相同的类型,而向量具有不同的类型。

    如果你真的想做这件事,你有两种(或更多,取决于你的幻想)方法。

    • 创建向量元组。最简单的变体,但如果你选择它,你必须阅读一两篇关于元组的文章。

    • Vector&lt;float&gt; 移动到Vector&lt;std::string&gt;。使用std::to_string,卢克!然后,只需使用Vector&lt;std::string&gt; arr[5] = { /* here's your vectors of strings*/} ;

    我必须为我的标记道歉,因为移动应用使用起来很不舒服。所以我愿意。

    【讨论】:

    • 是不是也不能将数组模板化,以便容纳所有类型的数据?
    • @AashishPandav 不,因为这样的数组根据定义和静态类型化不是数组。可以包含不同类型的数据结构称为“元组”,也是静态的,具有固定大小。当然,动态元组是存在的,但是 STL 中没有动态元组。
    【解决方案2】:

    自己写一个容器

    struct MyData
    {
      std::tuple<string &, string &, float &, float &, float &> operator[](size_t row)
      {
        return std::tie(myDateVector[row], 
                        myTimeVector[row],
                        mySolarRadiationVector[row],
                        myWindSpeedVector[row],
                        myAirTempVector[row]);
      }
    
      string & operator()(size_t row, size_t col) 
      { 
        switch (col) 
        {
          case 0: return myDateVector[row];
          case 1: return myTimeVector[row];
        }
      }
    
      float & operator()(size_t row, size_t col)
      { 
        switch (col) 
        {
          case 2: return mySolarRadiationVector[row];
          case 3: return myWindSpeedVector[row];
          case 4: return myAirTempVector[row];
        }
      }
    
    // and other useful members
    
    private:
      Vector<string> myDateVector;
      Vector<string> myTimeVector;
      Vector<float> mySolarRadiationVector;
      Vector<float> myWindSpeedVector;
      Vector<float> myAirTempVector;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-05
      • 2016-01-22
      • 2014-11-07
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多