Nein, aber das ist, was std::generate
für ist.
Anstatt einen einzelnen Wert zu erhalten, der innerhalb des Zielbereichs kopiert wird, erhält std::generate
eine "Generator" -Funktion, die jeden Wert nach Bedarf erstellt.
Also, wahrscheinlich, so etwas wie diese:
std::unique_ptr<int> ar[3];
std::generate(
std::begin(ar),
std::end(ar),
[]() { return std::make_unique<int>(1); }
);
Ich habe nicht versucht, und nicht wissen, ob Sie mit ihm überhaupt, um fummeln müssen Probleme die sich aus nicht-Kopierbarkeit zu vermeiden . Hoffentlich reicht die Bewegungssemantik.
(Natürlich in C++ 11, werden Sie your own make_unique
function benötigen.)
By the way, Ihre .begin()
und .end()
falsch waren (Arrays haben keine Member-Funktionen), so (dank einer Erinnerung von songyuanyao) Ich habe diese korrigiert.
Ist 'std :: array' zusammen mit einem 'std :: initializer_list' eine Option? –
'std :: array' ist eine Option, aber die Absicht ist nicht, das gleiche Füllelement' N' zu wiederholen. – Danra
Deshalb habe ich 'std :: initializer_list' (oder einfach' {} 'Initialisierung) vorgeschlagen. –