我正在尝试用C ++构建一个二维数组,而我不知道我将拥有多少行。这是一些代码:
在头文件中:
class model
{
... ...
float vertices[][3];
... ...
}
在.cpp文件中:
istringstream iss(str);
for (int i = 0; i <=2; i++)
{
iss >> vertices[counter][i];
}
这是处理它的正确方法吗?我遇到了分段错误,我只是想确保它不是由我使用数组的方式引起的。还有一种更好的方法可以解决这个问题,谢谢。
答案 0 :(得分:5)
当您不知道大小时,您需要使用指针或使用动态可调整大小的容器,例如std::vector
。
答案 1 :(得分:1)
结构/类定义中出现的Type variable[];
实际上意味着zero-length array是一个gcc扩展(ISO C ++不允许这样),对于一个在编译时
(您应该像其他人建议的那样使用std::vector
或new 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