【问题标题】:Declaring multidimensional vector with variable number of dimensions in C++在 C++ 中声明具有可变维数的多维向量
【发布时间】:2017-08-30 17:58:45
【问题描述】:

我正在尝试声明一个具有可变维数(用户输入)的多维向量。

这是我所拥有的:

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

vector< double > data;

int main() {
    int numberDimensions = 4;
    for (int it = 0; it < numberDimensions; it++){
      // Nor sure what to put here
    }
    return 0;
}

另一种解决方案是在开始时使用 if 语句,但我想知道是否存在另一种解决方案?

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int main() {
    int numberDimensions = 4; 
    if (numberDimensions==0)
        cout << 'error' << endl;
    else if (numberDimensions==1)
         vector< double> data;
    else if (numberDimensions==2)
         vector< vector< double> > data;
    else if (numberDimensions==3)
         vector< vector< vector< double> > > data;
    else if (numberDimensions==4)
         vector< vector< vector< vector< double> > > > data;
    return 0;
}

感谢您的任何建议,

【问题讨论】:

  • 嵌套向量不会给你非常好的性能。考虑使用具有不同索引计算的双精度向量。
  • 您的解决方案不是很有用。您将无法在这些分支之外使用data。您需要为每个分支重现整个应用程序逻辑(推荐模板)。考虑定义一个大小等于所有维度大小乘积的单个向量。
  • 对于单独的问题,这似乎是一个非常笨拙的解决方案。也许如果您告诉我们更多关于您要完成的工作,我们可以提供更好的解决方案?
  • 感谢您的建议,这是对我的问题的更完整描述:我的程序输入一个配置文件,其中用户定义了一组参数(名称、起始值、结束值和编号)参数的值)。我采用这些参数并迭代用户想要的所有值。对于每组参数,我都有一个要保存到文件的结果向量。为了避免每个参数集只有一个文件,我试图将所有结果放入一个多维向量中,然后保存该向量。
  • 您能否添加一个示例,说明您的配置文件的外观以及您想要实现的目标。

标签: c++ multidimensional-array vector


【解决方案1】:

正如 cmets 中所建议的,这是我遵循的解决方案:

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

vector< double > data;

int main() {

    std::vector<int> parameter1 {34,23,58};
    std::vector<int> parameter2 {1,2,3};

    data = vector< double > (parameter1.size()*parameter2.size());
    calculateResult(data);

   // If I want to access the result for Parameter1 = 58 and Parameter = 2 I do:
    int index1 = 2
    int index2 = 1
    double selectedResult = data[index1*parameter1.size()+index2];

    return 0;
}

【讨论】:

  • 将有助于查看calculateResult(...) 以了解结果向量data。还可以考虑 accepting this answer 向更广泛的社区展示问题已解决。
  • 不幸的是,它是一段更复杂的代码的一部分,太长而无法显示。这个解决方案对我有用(我也可能会查看地图),我会尽快接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
相关资源
最近更新 更多