0

抱歉标题混乱...

我一直在玩 C++,致力于解析游戏(Kerbal Space Program)保存文件的项目,以便我可以修改它并最终通过网络发送它。我被困在存储未知数量的船只和船员,所以我需要有一个未知大小的数组。

这可能吗?我认为有一个指向数组的指针将是要走的路。

我有:

class SaveFileSystem 
{
    string version;
    string UT;
    int activeVessel;
    int numCrew;
    ??? Crews; // !!
    int numVessels;
    ??? Vessels; // !!
}

Crews 和 Vessels 应该是结构数组:

struct Crew 
{
    string name;
    //Other stuff
};

struct Vessel
{

    string name;
    //Stuff
};

我猜我应该有类似的东西:

    this->Crews = new ???;
    this->Vessels = new ???;

在我的构造函数中初始化数组,并尝试通过以下方式访问它:

this->Crews[0].name = "Ship Number One";

这有道理吗???我希望“???”涉及一堆星号,例如“*struct (*)Crews”,但我不知道。我有正常的指针等,但这有点让我头疼......我想访问最后一个片段中的结构,但如果 C++ 不喜欢这样,我可以做指针算术。

我研究过向量,但我对效率有一种不健康的痴迷,你不知道它背后发生了什么真的让我很痛苦。

4

2 回答 2

8

使用向量。向量是一个标准的 C++ 类,可以动态调整大小并随身携带它们的大小。使用向量你的类变成了这个

class SaveFileSystem 
{
    string version;
    string UT;
    int activeVessel;
    vector<Crew> Crews;
    vector<Vessel> Vessels;
}

你对向量的不健康痴迷是错误的。说真的,我怀疑它们是否比您可能编写的任何代码效率低。你认为你的编译器的向量作者不称职吗?

我看到你很乐意使用字符串。为什么您关于效率和不知道幕后发生的事情的论点不适用于字符串?这是完全相同的情况。

于 2012-09-09T21:30:45.987 回答
3

使用 std::vector 或 std::list 可能是更好(更有效)的方法,但如果你真的想使用指针和 new 等,你可以这样做:

声明变量:

Crew* Crews;
Vessel* Vessels;

在您的构造函数中:

// initialize numCrew and numVessel before doing this:
this->Crews = new Crew[numCrew];
this->Vessels = new Vessel[numVessel];

然后,您可以根据需要访问数组。

在你完成想要的数组后,删除它们

delete[] this->Crews;
delete[] this->Vessels;

[] 是必不可少的。

另请注意,在大多数情况下不需要使用“this->”。

于 2012-09-09T21:32:20.587 回答