静态2维数组

4
我正在尝试在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];

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

3
只使用向量会更加容易。这是可能的吗? - chris
3个回答

5

你不能返回一个数组,但是你可以返回指向其第一个元素的指针或者引用数组。你只需要在函数签名中放置正确的类型:

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

Or maybe

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

3
请参见: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];都可以使用。

0

这取决于你的编译器,但大多数情况下,双重数组的名称被视为双重指针。因此,在你的情况下,twitterCounts 是一个 float**。


3
不正确。 twitterCounts 永远不会是 float **,而是一个类型为 float[5] 的数组,它会衰变成指向类型为 float[5] 的指针;因此,twitterCounts "是一个"(衰变为)float (*)[5] - Anthales

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接