gpt4 book ai didi

c++ - valarray 除元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:43 25 4
gpt4 key购买 nike

当我将 valarray 除以它的第一个元素时,只有第一个元素变为 1,其他元素保持其原始值。

#include <iostream>
#include <valarray>
using namespace std;

int main() {
valarray<double> arr({5,10,15,20,25});
arr=arr/arr[0]; // or arr/=arr[0];

for(int value:arr)cout << value << ' ';
return 0;
}

实际输出为:

1 10 15 20 25

预期的输出是:

1 2 3 4 5

为什么实际输出不符合预期?

我使用 g++(4.8.1) 和 -std=c++11

最佳答案

这个有效:

#include <iostream>
#include <valarray>
using namespace std;

int main() {
valarray<double> arr({5,10,15,20,25});
auto v = arr[0];
arr=arr/v; // or arr/=arr[0];

for(int value:arr)cout << value << ' ';
return 0;
}

问题是您正在尝试使用您正在同时修改的数组 (arr) 中的值 (arr[0])。< br/>直观地说,一旦您通过 arr[0]/arr[0] 更新了 arr[0],它包含什么值?
好吧,这就是从现在开始将用于除以其他值的值......
请注意,这同样适用于 arr/=arr[0](首先,arr[0]/arr[0] 发生,比其他所有发生,在 for 循环或类似的东西中)。
另请注意 documentation std::valarrayoperator[] 返回 T&。这证实了上面的假设:它被转为1作为你迭代的第一步,然后所有其他操作都没有用。
只需复制它即可解决问题,如示例代码所示。

关于c++ - valarray 除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35628493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com