3

私は型を使用しており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
4

1 に答える 1