我有一个类的字段,如名字,年龄,学校等。我需要能够存储其他信息,例如,他们旅行的地方,以及它在哪一年。我不能专门宣布另一个类来举行travelDestination和哪一年,所以我认为结构可能是最好的。这只是一个例子:
struct travel {
string travelDest;
string year;
};
问题是人们可能旅行的金额不同。我想的是只有一系列旅行结构来保存数据。但是我如何创建一个固定大小的数组来保存它们,而不知道我需要它有多大?
也许我会以完全错误的方式解决这个问题,所以任何有关更好方法的建议都会受到赞赏。
我意识到类和结构之间基本上没有区别,但是出于分配标准的目的,我不允许使用“类”,所以是的。
答案 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库在你可以使用的内容中有一些更好的(不太容易做一些内存分配愚蠢的)集合。