関数はこれstd::transform
を行う良い方法です:
#include <vector>
#include <algorithm>
#include <iostream>
double processElement(double e) {
return e * e;
}
std::vector<double> processAllElements(const std::vector<double>& in) {
// The output vector must be constructed to be the same size as the input.
std::vector<double> out(in.size(), 0);
// Process each element in the input vector into the output vector.
// (input is unchanged)
std::transform(in.begin(), in.end(), out.begin(), &processElement);
return out;
}
int main() {
std::vector<double> in;
in.push_back(1);
in.push_back(2);
std::vector<double> out = processAllElements(in);
std::cout << out[0] << "," << out[1];
}
値のバッファへの生のポインタを扱っている場合でも、引き続き使用できますstd::transform
int main() {
const int n = 3;
double in[] = {1,2,3};
double out[n];
std::transform(in, in+n, out, &processElement);
std::cout << out[0] << "," << out[1];
}
ただし、コンパイル時にベクトルのサイズがわからない場合は、 std::vector を使用してメモリを管理する方がはるかに優れています。