将m x 3数组更改为stl容器?

时间:2011-01-19 20:43:36

标签: c++ arrays struct 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容器有更简单的方法吗?我还想过创建一个足够大的表来持续一段时间(行数经常不会改变),但这感觉不对..

谢谢!

4 个答案:

答案 0 :(得分: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 :(得分:1)

这是一个非常好的主意。您只需提供一个运营商&gt;&gt;从文件中读取,你就完成了。但是,我真的不明白你在那里遇到的typedef struct {} - C ++从来没有要求过。

答案 2 :(得分:0)

这种方法很好,假设列数永远不会改变。您可以创建向量向量,或修改结构以包含向量。

答案 3 :(得分:0)

你很可能会逃避聚合载体。

vector < vector < string > > Array;

然后,您可以根据需要调整行/列的大小。如果结构对于您来说更方便,因为每行的条目数量固定,您可以轻松使用您的建议。

vector < row_t > Array;