C ++一个带有结构数组的类,不知道我需要多大的数组

时间:2010-03-19 00:30:03

标签: c++ arrays data-structures

我有一个类的字段,如名字,年龄,学校等。我需要能够存储其他信息,例如,他们旅行的地方,以及它在哪一年。我不能专门宣布另一个类来举行travelDestination和哪一年,所以我认为结构可能是最好的。这只是一个例子:

struct travel {
    string travelDest;
    string year;
};

问题是人们可能旅行的金额不同。我想的是只有一系列旅行结构来保存数据。但是我如何创建一个固定大小的数组来保存它们,而不知道我需要它有多大?

也许我会以完全错误的方式解决这个问题,所以任何有关更好方法的建议都会受到赞赏。


我意识到类和结构之间基本上没有区别,但是出于分配标准的目的,我不允许使用“类”,所以是的。

5 个答案:

答案 0 :(得分:9)

您可以尝试将std::vector与每个人相关联,向量中的每个条目都包含一个结构:

typedef struct travel {
    string travelDest;
    string year;
} travelRecord;

std::vector<travelRecord> travelInfo;

然后,您可以根据需要将项添加到矢量中:

travelRecord newRecord1 = {"Jamaica", "2010"};
travelInfo.push_back(newRecord1);

travelRecord newRecord2 = {"New York", "2011"};
travelInfo.push_back(newRecord2);

可以找到有关矢量操作的更多信息here

答案 1 :(得分:1)

尝试了解C ++标准模板库(STL)。例如,您可以使用list

答案 2 :(得分:1)

您可能希望使用其中一个STL容器类来保存结构(或者更好的是,将结构重构为类以隐藏数据成员并生成get / set访问器)

的std ::矢量

的std ::列表

...

您选择哪一项完全取决于您预期对其进行的操作。向量适用于基本存储和随机访问。如果要执行任何排序或搜索功能,您可能需要列表,甚至可能需要地图或多图。

以下是有关STL的更多信息的良好起点:http://www.parashift.com/c++-faq-lite/class-libraries.html

答案 3 :(得分:1)

我同意其他人的意见,使用类似列表的stl容器。当您将数据推送到列表(或任何其他容器)时,列表(或任何其他容器)将会增长,如下所示:


#include <list>
#include <string>
using namespace std;

struct travel {
    string travelDest;
    string year;
};

int main() {
    list<travel> travels;
    travel t = {"Oslo", "2010"};
    travels.push_back(t);
}

另请注意,虽然您说无法创建类,但您完全愿意创建结构。在C ++中,这些用于所有实际目的完全相同,除了结构变量默认是公共的,而类变量默认是私有的。

答案 4 :(得分:0)

要创建包含100个元素的数组,您可以执行以下操作:

travel* pTravelArray = new travel[100];

你可以制作那个变量

int numberOfElements = 100;
travel* pTravelArray = new travel[numberOfElements];

当你完成时,不要忘记摆脱它:

delete [] pTravelArray;

正如其他人所建议的那样,STL库在你可以使用的内容中有一些更好的(不太容易做一些内存分配愚蠢的)集合。