C++ 将m x 3阵列更改为stl容器?

C++ 将m x 3阵列更改为stl容器?,c++,arrays,struct,stl,C++,Arrays,Struct,Stl,我有一个数组: const string ARRAY[][3] = { {"Kolkata","Mumbai","218"}, {"Kolkata","New Delhi","316"}, ... {"Mumbai","Chennai","715"}, {"Chennai","Bangalore","516"}, }; 这是存储整个表的方便方法,因为我知道有多少行。但是,在将来,数据需要从文件中读取,任何人都可以并且将对该文件进行编辑 我想创建一个结构,

我有一个数组:

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;
然后创建一个
向量
。这是个好主意吗?使用stl容器有没有更简单的方法?我还考虑过创建一个足够大的表来维持一段时间(行的数量不会经常改变),但这感觉不太对


谢谢

这是个不错的主意。您只需要提供一个操作符>>来读取文件,就完成了。但是,我真的不理解TyBuffFrxt{}你在那里的东西——C++从来都不需要。p> 这是个不错的主意。您只需要提供一个操作符>>来读取文件,就完成了。但是,我真的不理解TyBuffFrxt{}你在那里的东西——C++从来都不需要。p> 假设列的数量永远不会改变,这种方法很好。您可以创建向量向量,或者修改结构以包含向量。

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

最简单的转换是在结构中使用数组:

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

std::vector<row> v;

如果要为每个元素使用单独的数据成员,如示例中所示,应为它们指定有用的名称,而不仅仅是将它们命名为“col#”。

最简单的转换是在结构中使用数组:

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

std::vector<row> v;

如果要为每个元素使用单独的数据成员,如您在示例中所示,您应该为它们提供有用的名称,而不仅仅是将它们命名为“col#”。

很可能不需要聚合向量

vector < vector < string > > Array;
vector>数组;
然后可以根据需要调整行/列的大小。如果由于每行的条目数固定,结构对您更方便,那么您可以很容易地使用您的建议

vector < row_t > Array;
vector数组;

你很可能通过聚合向量而逃脱惩罚

vector < vector < string > > Array;
vector>数组;
然后可以根据需要调整行/列的大小。如果由于每行的条目数固定,结构对您更方便,那么您可以很容易地使用您的建议

vector < row_t > Array;
vector数组;

默认构造函数是不必要的(它不执行隐式定义的默认构造函数将执行的任何操作)。在许多情况下,以下划线开头的名称是保留给实现的(有很多方法可以指定何时允许使用它们以及何时不允许使用它们)。最好不要在名字前面加下划线。默认构造函数是不必要的(它不会做任何隐式定义的默认构造函数会做的事情)。在许多情况下,以下划线开头的名称是保留给实现的(有很多方法可以指定何时允许使用它们以及何时不允许使用它们)。最好不要在名字前面加下划线。从文件中读取根本不是问题。至于struct,它只是为了更容易地处理行。我不知道你所说的“C++从来没有要求过它”是什么意思。@Sagar:这是C的宿醉,本质上是不必要的<代码>结构行{…}足以定义一个名为
的类型。从文件中读取完全不是问题。至于struct,它只是为了更容易地处理行。我不知道你所说的“C++从来没有要求过它”是什么意思。@Sagar:这是C的宿醉,本质上是不必要的<代码>结构行{…}足以定义一个名为
的类型。不幸的是,boost不是一个选项。不过,我确实查看了它,这会使它变得更容易。@Sagar:该类模板最多包含100行代码。您可以很容易地从Boost中提取它和/或使用相同的接口实现您自己的版本。不幸的是,Boost不是一个选项。不过,我确实查看了它,这会使它变得更容易。@Sagar:该类模板最多包含100行代码。您可以很容易地从Boost中提取它和/或使用相同的接口实现您自己的版本。