Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回成员数为常量的数组_C++_Arrays_Complex Numbers_Multiple Return Values - Fatal编程技术网

C++ 返回成员数为常量的数组

C++ 返回成员数为常量的数组,c++,arrays,complex-numbers,multiple-return-values,C++,Arrays,Complex Numbers,Multiple Return Values,我想知道如何编写返回成员数为常量的数组的函数。这有意义吗? 我知道我可以做这样的事情: float* WojtekEQgraph::_Wk_N(float k) { float comp[2]; comp[0] = cos(-2.0f * double_Pi * (float)k); // Real number comp[1] = sin(-2.0f * double_Pi * (float)k); // Imag number return comp; }

我想知道如何编写返回成员数为常量的数组的函数。这有意义吗? 我知道我可以做这样的事情:

float* WojtekEQgraph::_Wk_N(float k)
{
    float comp[2];
    comp[0] = cos(-2.0f * double_Pi * (float)k); // Real number
    comp[1] = sin(-2.0f * double_Pi * (float)k); // Imag number

    return comp;
}
它返回一个包含两个成员的数组。但实际上“返回”是指向数组的指针,不管它有多少成员。 但如果以某种不可预测的方式出现

浮动补偿[3]
浮动补偿[1]
我想要
返回comp会给我错误。
我该怎么做

我试过:

float[2] WojtekEQgraph::_Wk_N(float k)
{
    float comp[2];
    comp[0] = cos(-2.0f * double_Pi * (float)k); // Real number
    comp[1] = sin(-2.0f * double_Pi * (float)k); // Imag number

    return comp;
}

但它不起作用。对于任何帮助,谢谢。

< P>如果你想返回一个数组对象,C++标准库将它拼写为。因此,将其应用于您的示例:

std::array<float, 2> WojtekEQgraph::_Wk_N(float k)
{
    std::array<float, 2> comp;
    comp[0] = cos(-2.0f * double_Pi * (float)k); // Real number
    comp[1] = sin(-2.0f * double_Pi * (float)k); // Imag number

    return comp;
}
std::数组WojtekEQgraph::_Wk_N(float k)
{
std::阵列comp;
comp[0]=cos(-2.0f*double_Pi*(float)k);//实数
comp[1]=sin(-2.0f*double_Pi*(float)k);//图像编号
返回补偿;
}
我会的。其他优点包括缺少悬空引用和需要处理混乱的内存分配。一种短而甜的混合物


如果你在处理复数,还有另一个答案。不要重新发明轮子,而是使用它。

< P>如果你想返回一个数组对象,C++标准库将它拼写为。因此,将其应用于您的示例:

std::array<float, 2> WojtekEQgraph::_Wk_N(float k)
{
    std::array<float, 2> comp;
    comp[0] = cos(-2.0f * double_Pi * (float)k); // Real number
    comp[1] = sin(-2.0f * double_Pi * (float)k); // Imag number

    return comp;
}
std::数组WojtekEQgraph::_Wk_N(float k)
{
std::阵列comp;
comp[0]=cos(-2.0f*double_Pi*(float)k);//实数
comp[1]=sin(-2.0f*double_Pi*(float)k);//图像编号
返回补偿;
}
我会的。其他优点包括缺少悬空引用和需要处理混乱的内存分配。一种短而甜的混合物


如果你在处理复数,还有另一个答案。不要重新发明轮子,而是使用它。

如果您使用的是c++11,一个解决方案就是使用std::array

std::array< float, 2 > WojtekEQgraph::_Wk_N(float k)
{
    std::array< float, 2 > comp;
    comp[0] = cos(-2.0f * double_Pi * (float)k); // Real number
    comp[1] = sin(-2.0f * double_Pi * (float)k); // Imag number

    return comp;
}

如果您使用的是c++11,一个解决方案就是使用std::array

std::array< float, 2 > WojtekEQgraph::_Wk_N(float k)
{
    std::array< float, 2 > comp;
    comp[0] = cos(-2.0f * double_Pi * (float)k); // Real number
    comp[1] = sin(-2.0f * double_Pi * (float)k); // Imag number

    return comp;
}

您的代码返回一个指向局部变量的指针,这很可能会产生未定义的行为:

float comp[2];
...
return comp;
您的问题的直接答案是使用
std::array
数据类型

然而,似乎您想要“滥用”数组来表示复数。我建议引入一个类并返回该类的对象:

struct ComplexNumber{
  float real;
  float imaginary;
}

ComplexNumber WojtekEQgraph::_Wk_N(float k) {
  ComplexNumber c;
  c.real = ...
  c.imaginary = ...
  return c;
}

您的代码返回一个指向局部变量的指针,这很可能会产生未定义的行为:

float comp[2];
...
return comp;
您的问题的直接答案是使用
std::array
数据类型

然而,似乎您想要“滥用”数组来表示复数。我建议引入一个类并返回该类的对象:

struct ComplexNumber{
  float real;
  float imaginary;
}

ComplexNumber WojtekEQgraph::_Wk_N(float k) {
  ComplexNumber c;
  c.real = ...
  c.imaginary = ...
  return c;
}
返回固定长度的数组通常是缺少抽象的标志 虽然@StoryTeller's是您字面上要求的正确答案,但也可以说您真正想要返回的不是“2个浮点数的数组”——您想要返回一个复数

现在,与@StefanLechner不同,我建议您使用标准库的类来处理复数,使用浮点数指定以适合您当前的精度选择:

std::complex<float> WojtekEQgraph::_Wk_N(float k)
{
    return {
        cos(-2.0f * double_Pi * (float)k), // Real number
        sin(-2.0f * double_Pi * (float)k), // Imag number
    };
}
std::复杂WojtekEQgraph::_Wk_N(float k)
{
返回{
cos(-2.0f*双π*(浮点)k),//实数
sin(-2.0f*double_Pi*(float)k),//图像编号
};
}
在您更具体的情况下,只需执行以下操作:

std::complex<float> WojtekEQgraph::_Wk_N(float k)
{
    return std::polar<float>( 1.0f, -2.0f * double_Pi * k );
}
std::复杂WojtekEQgraph::_Wk_N(float k)
{
返回标准::极性(1.0f,-2.0f*双π*k);
}
返回固定长度的数组通常是缺少抽象的标志 虽然@StoryTeller's是您字面上要求的正确答案,但也可以说您真正想要返回的不是“2个浮点数的数组”——您想要返回一个复数

现在,与@StefanLechner不同,我建议您使用标准库的类来处理复数,使用浮点数指定以适合您当前的精度选择:

std::complex<float> WojtekEQgraph::_Wk_N(float k)
{
    return {
        cos(-2.0f * double_Pi * (float)k), // Real number
        sin(-2.0f * double_Pi * (float)k), // Imag number
    };
}
std::复杂WojtekEQgraph::_Wk_N(float k)
{
返回{
cos(-2.0f*双π*(浮点)k),//实数
sin(-2.0f*double_Pi*(float)k),//图像编号
};
}
在您更具体的情况下,只需执行以下操作:

std::complex<float> WojtekEQgraph::_Wk_N(float k)
{
    return std::polar<float>( 1.0f, -2.0f * double_Pi * k );
}
std::复杂WojtekEQgraph::_Wk_N(float k)
{
返回标准::极性(1.0f,-2.0f*双π*k);
}


<代码> STD::数组< /代码>。您还可以考虑创建<代码>结构> <代码>或<代码>类< /代码>来表示复数。沿着这条路走下去,生活会变得更简单。@lakeweb那里已经有了
std::complex
,无需重新设计投影平面,也已经有了
std::polar
来实现此功能does@M.M我已经给出了一个答案:<代码> STD::数组。您还可以考虑创建<代码>结构> <代码>或<代码>类< /代码>来表示复数。沿着这条路走下去,生活会变得更简单。@lakeweb已经有了
std::complex
,不需要重新设计投影平面,也已经有了
std::polar
来实现这个功能does@M.M当前位置我已经给出了答案……同意,但他应该首先研究指针是什么以及它们是如何使用的work@Moia-不,OP最好以后再研究。价值语义非常直观,易于掌握。数组到指针的转换是一个无关紧要的话题,它无缘无故地减慢了研究的速度。@StoryTeller:你的答案很好,但你的这句话很有价值。@einpoklum-我不能相信。如果您还没有看到,我强烈推荐CppCon 2015。很好,但它似乎真的不知道数组[2]是什么意思。同意,但他应该首先研究指针是什么以及它们是如何使用的work@Moia-不,OP最好稍后再研究。价值语义非常直观,易于掌握。数组到指针的转换是一个无关紧要的话题,它无缘无故地减慢了学习的速度。@StoryTeller:你的答案很好,但你的这条评论很有价值。@einpoklum-我不能相信