【问题标题】:A dynamic 2 dimensional array in C++?C ++中的动态二维数组?
【发布时间】:2011-01-11 03:26:49
【问题描述】:

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

在头文件中:

class model
{
         ... ...

    float vertices[][3];

         ... ...
}

在.cpp文件中:

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

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

【问题讨论】:

    标签: c++


    【解决方案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

    【讨论】:

      【解决方案2】:

      出现在结构/类定义中的Type variable[]; 实际上意味着zero-length array,它是一个gcc 扩展(ISO C++ 不允许这样做),用于在编译时已知的可变长度的灵活数组.

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我建议包装一个 single 向量。使用数学从 2D 索引计算它的 1D 索引。通常更简单、更快。
        • @GMan:我不会这么说,因为其中一个维度是固定的 (3)。
        • @GMan:但是如果应用程序需要诸如“当第 2 行中有东西时插入第 1 行”之类的操作,那么移动所有内容可能会变得非常昂贵。实际上,如果嵌套向量完全交错,它会变得很昂贵......
        • std::vector&lt; std::tr1::array&lt;float, 3&gt; &gt;
        • 错过了一个已修复的问题。 @mloskot 的解决方案似乎不错。
        猜你喜欢
        • 2018-08-07
        • 2015-09-17
        • 1970-01-01
        • 1970-01-01
        • 2021-02-03
        • 2012-05-07
        • 2015-02-10
        • 1970-01-01
        • 2020-05-20
        相关资源
        最近更新 更多