std::transform
ループを実行させることができます:
transform(std::begin(a), std::end(a), std::back_inserter(v),
[] (S& s) { return &s; });
関数名はADLstd::transform
によって検出されるため、name を完全修飾する必要がないことに注意してください。
これは、その動作をテストするための完全なプログラムです。
#include <iostream>
#include <vector>
#include <algorithm> // <== Required for std::transform
#include <iterator> // <== Required for std::back_inserter, std::begin, std::end
struct S
{
S() : i(0) { }
S(int i_) : i(i_) { }
int i;
};
int main()
{
S a[256] = { 42 }; // Copy-initializes first element from 42,
// default-constructs all other elements
std::vector<S*> v;
transform(std::begin(a), std::end(a), std::back_inserter(v),
[] (S& s) { return &s; });
std::cout << v.size() << std::endl; // Prints 256
std::cout << v[0]->i << std::endl; // Prints 42
std::cout << v[1]->i << std::endl; // Prints 0
}
そして、これがライブの例です。