2017-08-30 25 views
0

我想要聲明具有可變維度數量(用戶輸入)的多維向量。在C++中聲明具有可變數量維度的多維向量

這裏是我有:

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

感謝您的任何建議,

+3

嵌套向量不會給你帶來非常不錯的表現。考慮使用變化指數計算的雙打平面向量。 – StoryTeller

+1

您的解決方案不是非常有用。你將無法在這些分支之外使用數據。您需要爲每個分支複製整個應用程序邏輯(建議使用模板)。考慮定義一個大小等於所有維度大小乘積的單個向量。 –

+0

這似乎是一個非常難以解決的問題。也許如果你告訴我們更多關於你正在努力完成的事情,我們可以提供更好的解決方案。 –

回答

0

如這裏的意見建議是我遵循的解決方案:

#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; 
} 
+0

有助於查看'calculateResult(...)'來理解結果向量'data'。還想[接受這個答案](https://meta.stackexchange.com/q/5234/179419)向更廣泛的社區表明問題已解決。 –

+0

不幸的是,它是更復雜的代碼的一部分,它會顯示太久。這個解決方案適用於我(我也可能會查看地圖),我會盡快接受。 –