在构建 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,但该接口(interface)适合我所拥有的(我有一个函数,每次访问它时都会生成一个新的 T 对象,而不是一对范围的迭代器)。
C++0x 解决方案优于 C++03 解决方案(即,如果有更好的方法,则利用新标准的解决方案)优于需要使用 boost 的解决方案。
最佳答案
std::function< T() > make_t;
std::vector< T > t;
int const count = 100000;
t.reserve( count );
std::generate_n( std::back_inserter(t), count, make_T );
std::back_inserter
在<iterator>
.
关于c++ - 我在这里支付违约 build 费用吗?如果支付的话,我可以避免吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590426/