C ++创建数组?

时间:2013-07-26 18:39:02

标签: c++ arrays for-loop

所以我有一个顶点数组,我试图用文件中的数据填充数组。

现在我的代码如下所示:

    int VertexCount = Input.get();
    MVertex Vertices[4] =
    {
        {0.0f, 0.0f, 0.0f,},
        {1.0f, 0.0f, 1.0f,},
        {0.0f, 0.0f, 1.0f,},
        {1.0f, 0.0f, 0.0f,},
    };

现在它工作得很好,除了使用VertexCount初始化数组的大小,但我想得到它,这取决于顶点数我需要一个for循环来为我填充数据。我想保持相同的数组格式,因为由于某种原因,它不会以任何其他方式工作,但像这样。我正在思考以下几点:

    int VertexCount = Input.get();
    MVertex Vertices[VertexCount] =
    {
        for (int i = 0; i < VertexCount; i++)
        {
            {Input.get(), Input.get(), Input.get(),},
        }
    };

但这不起作用我只是得到一些语法错误。有人可以告诉我怎么写吗?

2 个答案:

答案 0 :(得分:2)

你试图一次做太多事情。您需要将其分解为两个步骤:

  1. 声明数组并分配数组:

    int VertexCount = Input.get();
    MVertex* Vertices = new MVertex[VertexCount];
    
  2. 初始化数组的元素:

    for (int i = 0; i < VertexCount; i++)
    {
        MVertex v;
        v.x = Input.get();
        v.y = Input.get();
        v.z = Input.get();
    
        Vertices[i] = v;
    }
    
  3. 请注意,我分别创建了MVertex对象。在我看来,这使您的代码的意图更加清晰。它还可以帮助您编写代码,因为您一次只关注一件事,而不是尝试使用更复杂的语法一次完成几个步骤。

    我还假设MVertex中的三个字段名为xyz;适当地改变这些。

    由于此代码分配了一个动态数组,因此当您使用语句

    完成后,必须释放已分配的内存。
    delete[] Vertices;
    

答案 1 :(得分:-1)

要创建可变大小的数组,请使用new运算符

MVertex* Vertices = new MVertex Vertices[VertexCount];

在堆上创建数组(并记得稍后删除它),或者使用像std :: vector这样的STL容器。