C ++中的动态二维数组?

时间:2010-01-30 06:20:58

标签: c++

我正在尝试用C ++构建一个二维数组,而我不知道我将拥有多少行。这是一些代码:

在头文件中:

class model
{
         ... ...

    float vertices[][3];

         ... ...
}

在.cpp文件中:

 istringstream iss(str);
 for (int i = 0; i <=2; i++)
     {
         iss >> vertices[counter][i];
     }

这是处理它的正确方法吗?我遇到了分段错误,我只是想确保它不是由我使用数组的方式引起的。还有一种更好的方法可以解决这个问题,谢谢。

3 个答案:

答案 0 :(得分:5)

当您不知道大小时,您需要使用指针或使用动态可调整大小的容器,例如std::vector

答案 1 :(得分:1)

结构/类定义中出现的Type variable[];实际上意味着zero-length array是一个gcc扩展(ISO C ++不允许这样),对于一个在编译时

(您应该像其他人建议的那样使用std::vectornew Type[n]。)

答案 2 :(得分:1)

如果尺寸之一是静态尺寸,这里有许多可能的解决方案之一:

typedef float triplet[3];
std::size_t const n = 10;
triplet* a = new triplet[n];

for (std::size_t i = 0; i < n; ++i)
{
    // ...
}
delete [] a;

我建议使用Boost.MultiArray

已经提出了一个非常类似的问题并通过大量例子回答了

C++ dynamically allocated array of statically dimensioned arrays