2011-01-19 15 views
0

我有一個數組:將m x 3數組更改爲stl容器?

const string ARRAY[][3] = { 
    {"Kolkata","Mumbai","218"}, 
    {"Kolkata","New Delhi","316"}, 
    ... 
    {"Mumbai","Chennai","715"}, 
    {"Chennai","Bangalore","516"}, 
}; 

這是存儲整個表,因爲我知道我有多少行有一個簡便的方法。但是,將來需要從文件中讀取數據,這個文件可以被任何人編輯。

我想創建一個結構,像什麼的:

typedef struct row { 
    string col1; 
    string col2; 
    string col3; 
} row_t; 

,然後創建一個vector<row_t>。這是一個好主意嗎?使用stl容器有沒有更簡單的方法?我也想過創建一個足夠長的桌子來保持一段時間(行數不會經常變化),但是這種感覺不對..

謝謝!

+0

您的默認構造函數是不必要的(它不會執行任何隱式定義的默認構造函數)。以下劃線開頭的名字在很多情況下都是保留給實現的(還有一些[複雜規則](http://stackoverflow.com/questions/228783/),指定何時允許使用它們以及何時不允許使用他們)。最好避免使用下劃線前綴名稱。 – 2011-01-19 20:50:38

+0

我會編輯,謝謝! – Sagar 2011-01-19 20:52:48

回答

2

最簡單的轉換將是使用在結構中的數組:

struct row { 
    std::string data[3]; 
}; 

std::vector<row> v; 

或者你可以使用std::/std::tr1::/boost::array類模板:如果您打算

std::vector<std::array<std::string, 3> > v; 

要爲每個元素使用不同的數據成員,就像你在例子中顯示的那樣,你應該給他們一些有用的名字,而不只是將它們命名爲「col#」。

1

這是一個非常好的主意。你只需要提供一個操作符>>來從文件中讀取,你就完成了。但是,我真的不明白typedef struct {}的東西,因爲C++從來沒有要求這樣做。

+0

從文件中讀取並不是問題。至於結構,它只是使處理行更容易的東西。我不確定你的意思是「C++從來沒有要求過」.. – Sagar 2011-01-19 20:51:52

0

這種方法很好,假設列數永遠不會改變。你可以創建一個矢量矢量,或者修改你的結構來包含一個矢量。

0

你很可能逃脫聚合載體。

vector < vector <string> > Array; 

然後,您可以根據需要調整行/列的大小。如果由於每行固定的條目數,結構對您來說更方便,您可以輕鬆使用您的建議。

vector <row_t> Array;