【问题标题】:Static 2d array静态二维数组
【发布时间】:2012-04-25 18:09:33
【问题描述】:

我正在尝试在 C++ 中定义和使用二维数组

const float twitterCounts[][5] = {
        {1,0,0,0,0},
        {0,2,0,0,0},
        {0,0,3,0,0}
};

像这样返回它:

const float ??? TwitterLiveData::data() {
    return twitterCounts;
}

并像这样使用它

float x = TwitterLiveData::data()[1][1];

静态访问器的正确签名是什么?

【问题讨论】:

  • 只使用矢量要容易得多。有这种可能吗?

标签: c++ arrays static


【解决方案1】:

您不能返回数组,但可以返回指向其第一个元素的指针或对数组的引用。您只需在签名中输入正确的类型:

const float (*TwitterLiveData::data())[5] {

或许

const float (&TwitterLiveData::data())[3][5] {

【讨论】:

    【解决方案2】:

    见:https://stackoverflow.com/a/10264383/365496

    总结:

    #include <array>
    
    const std::array<std::array<float,5>,3>
    twitterCounts = {
            {1,0,0,0,0},
            {0,2,0,0,0},
            {0,0,3,0,0}
    };
    
    const std::array<std::array<float,5>,3>
    TwitterLiveData::data() {
        return twitterCounts;
    }
    

    您可能不想按值返回数组,因为这可能太昂贵了。您可以改为返回对数组的引用:

    const std::array<std::array<float,5>,3> &TwitterLiveData::data();
    

    在任何一种情况下,您想要的语法 float x = TwitterLiveData::data()[1][1]; 都有效。

    【讨论】:

      【解决方案3】:

      这取决于您的编译器,但大多数情况下,双精度数组的名称算作双精度指针。 所以在你的情况下 twitterCounts 是一个浮点数**。

      【讨论】:

      • 不正确。 twitterCounts 永远不会是float **,但作为float[5] 类型的数组,它将衰减为指向float[5] 类型的指针;所以twitterCounts“是一个”(衰减到)float (*)[5]
      猜你喜欢
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多