You can let std::transform execute a loop:
transform(std::begin(a), std::end(a), std::back_inserter(v), [] (S& s) { return &s; });
Note that you do not need to fully qualify the name std::transform , because the function name will be found by ADL .
This is a complete program to test its behavior:
#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 }
And here is a living example .
source share