Ich habe eine std::array<Foo, 10>
und ich möchte eine std::array<Bar, 10>
mit einer Funktion von Foo
bis Bar
erstellen. Normalerweise würde ich std::transform
wie so verwenden:Wie erstelle ich ein std :: array mit std :: transform ohne Standardkonstruktor
array<Bar, 10> bars;
transform(foos.begin(), foos.end(), bars.begin(), [](Foo foo){
return Bar(foo.m_1, foo.m_2);
});
Allerdings ist Bar
nicht über einen Standardkonstruktor verfügen, so kann ich das bars
Array nicht erstellen. Ich könnte immer vector
verwenden, aber es wäre nett, array
verwenden zu können, um sicherzustellen, dass ich immer genau 10 Elemente habe. Ist das möglich?
Man könnte so etwas wie eine [nicht ganz noch] (https://www.reddit.com/r/cpp/comments/1njair/stdoptional_and_stddynarray_removed_from_c14_and/) -std [std :: optional] (https verwenden /github.com/akrzemi1/Optional), um den Balken für die Zwecke dieses Arrays zu umbrechen. Zumindest würde das Bar im Allgemeinen nicht zwingen, einen Standardkonstruktor zu haben, und es ist ein nützlicher Bestandteil in einem Projekt (imo). – HostileFork
Wäre ein 'vector.reserve (10)' in Ihrem Code für die Größe '10' nicht ausreichend oder möchten Sie sicherstellen, dass der Client-Code diese Größe nicht ändert? – Niall
In diesem Fall funktioniert 'vector.reserve' gut, aber es ist keine Idee, da diese Sammlung semantisch 10 Elemente haben muss, und das wird nicht in allen Fällen funktionieren. Image, wenn ich es an eine Funktion übergeben muss, die ein 'std :: array & akzeptiert'. –
Drew