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

时间:2013-01-12 18:01:31

标签: c++

我有一个返回double数组的函数。在我的调试器中,我阻止了数组,看到它的值是{6.5,1.5}。但是,当我将阵列打印到cout时,我看到“6.5,3.30525e + 230”。我的猜测是<<正在改变我的价值观,或者我没有正确格式化

double *result;

result = haar1d(series, 2, seriesAverage);

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

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

已修复:这就是我最终的目标。

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);
}

在main中:

vector<double> result = haar1d(series, avg);

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

1 个答案:

答案 0 :(得分:6)

不,operator<<不会修改其参数。它按原样打印。但是,我敢打赌你的功能看起来像这样:

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

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

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

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