私は型を使用しておりstd::valarray<std::valarray<double>>
、含まれている各 valarrays 要素を合計して、std::valarray<double>
.
std::valarray<T>
C++ のドキュメントには、演算子 .sum() は、演算子が型 T に対して定義されている限り適用できると記載されてい+=
ます。以下のコード (method1) はこれを に適用しようとしますstd::valarray<std::valarray<double>>
が、結果はナンセンスに見えます。
+=
ただし、演算子 (method2)を使用してこれを手動で実行すると、必要な結果が得られます。しかし、method2 が機能するという事実は、演算子+=
が type に対して定義されていることを意味しているように思われstd::valarray<double>
ます。動作するはずです。ここで何が起こっているのか本当に理解できません...
私のコード:
#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