插入运算符 (<<) 是否修改C++值?
Does C++ insertion operator (<<) modified value?
我有一个返回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++。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 左角支架解释为操作员&lt;而不是模板参数
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- 超载操作员&lt;&lt; - 必须是二进制操作员
- 没有匹配的“运营商&lt;&lt;”