我正在使用该类型std::valarray<std::valarray<double>>
并希望明智地对每个包含的 valarrays 元素求和,以留下std::valarray<double>
.
std::valarray<T>
C++ 文档指出,只要为类型 T 定义了运算符,就可以应用运算符 .sum() +=
。我下面的代码 (method1) 尝试将此应用于std::valarray<std::valarray<double>>
,但结果似乎是无稽之谈。
但是,如果我使用运算符(method2)手动执行此操作+=
,我会得到我想要的结果。但是method2有效的事实似乎意味着运算符+=
是为type定义的std::valarray<double>
,因此method1是使用.sum()定义的。应该管用。我真的无法理解这里发生了什么......
我的代码:
#include <iostream>
#include <valarray>
// Attempt to use .sum() operator
std::valarray<double> method1(const std::valarray<std::valarray<double>>& data) {
return data.sum();
}
// Manual summation using += operator
std::valarray<double> method2(const std::valarray<std::valarray<double>>& data) {
std::valarray<double> sum(data[0].size());
for (size_t i{0}; i < data.size(); i++) {
sum += data[i];
}
return sum;
}
// Display size and elements
void showData(const std::valarray<double> data) {
std::cout << "Size = " << data.size() << "\n";
std::cout << "Data = ";
for (size_t i{0}; i < data.size(); i++) {
std::cout << data[i] << " ";
}
std::cout << "\n\n";
}
int main() {
std::valarray<std::valarray<double>> data{{1,2},{3,4}};
showData(method1(data));
showData(method2(data));
}
我的输出:
Size = 0
Data =
Size = 2
Data = 4 6