插入运算符 (<<) 是否修改C++值?

Does C++ insertion operator (<<) modified value?

本文关键字:lt C++ 修改 是否 运算符 插入      更新时间:2023-10-16

我有一个返回double类型数组的函数。在我的调试器中,我检查了数组,看到它的值是{6.5,1.5}。然而,当我将数组输出到count时,我看到,"6.5,3.30525e+230,"。我猜要么是<<正在改变我的值或者我没有正确格式化

double *result;
result = haar1d(series, 2, seriesAverage);

->在这里的断点,我看到result[0] == 6.5和result[1] == 1.5

for(int i = 0; i < 2; i++)
{
    cout << result[i] << ",";
}

Fixed:这是我最后的结果。

vector<double> haar1d(vector<double> vec, double seriesAverage)
{
vector<double> transVec(vec.size(), 0);
vector<double>::size_type length = vec.size();
if(vec[0] == seriesAverage)
{
    return vec;
}
int diffFromAvgs = length / 2;
for(int i = 0; i < length; i += 2)
{
    double pairAverage = (vec[i] + vec[i + 1]) / 2;
    transVec[i] = pairAverage;
    transVec[diffFromAvgs+i] = vec[i] - pairAverage;
}
return haar1d(transVec, seriesAverage);
}
在主要

:

vector<double> result = haar1d(series, avg);
for(vector<double>::iterator it = result.begin(); it != result.end(); ++it)
{
    cout << *it << ",";
}

不,operator<<不修改它的参数。它按原样打印它们。然而,我打赌你的函数看起来像这样:

double* haar1d(/* ... */)
{
  double arr[N];
  // Fill this array
  return arr;
}

点在于数组arr是函数的局部。当函数结束时,它将被销毁。但是,您返回的是指向其第一个元素的指针。该指针在函数外部将无效,因为它指向的数组已被销毁。现在使用这个指针将调用未定义的行为,所以如果值开始随机变化,你不应该感到惊讶。

我建议使用std::array<double, N>std::vector<double>,这取决于您的数组大小是否是编译时常数。返回其中任何一个都会将其内容复制到调用函数。

如果我猜对了,你可能会使用你给的参数2作为数组的大小。如果正在编译,则说明您正在使用具有可变长度数组扩展的编译器,并且您的代码不是标准的c++。