В случае, когда T стоит дорого, я хотел бы знать, плачу ли я за построение по умолчанию в следующем случае (думаю, что я делаю)
std::function< T() > make_t;
std::vector< T > t( 100000 );
std::generate( t.begin(), t.end(), make_T );
Если я должен заплатить за это, могу ли я избежать этого? Я хотел написать что-то вроде
std::function< T() > make_t;
std::vector< T > t;
t.reserve( 100000 );
std::generate( t.begin(), t.end(), make_T );
Но это не работает, потому что он не перемещает t.end () в конец того, что зарезервировано. Является ли следующее безопасным / желательным / правильным?
std::function< T() > make_t;
std::vector< T > t;
t.reserve( 100000 );
std::generate( t.begin(), t.begin() + 100000, make_T );
Я также подумал, что мог бы использовать back_inserter, но интерфейс подходит для того, что у меня есть (у меня есть функция, которая генерирует новый объект T каждый раз, когда к нему обращаются, а не пара итераторов для диапазона).
Решения C ++ 0x предпочтительнее решений C ++ 03 (т. Е. Те, которые используют новый стандарт, если есть лучший способ сделать это там), предпочтительнее решения, которое должно использовать boost.