如果T建造成本高,我想知道我是否支付以下情况下的默认施工(我想我这样做)
std::function< T() > make_t;
std::vector< T > t( 100000 );
std::generate( t.begin(), t.end(), make_T );
Run Code Online (Sandbox Code Playgroud)
如果我必须付钱,我可以避免吗?我想写点类似的东西
std::function< T() > make_t;
std::vector< T > t;
t.reserve( 100000 );
std::generate( t.begin(), t.end(), make_T );
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为它不会将t.end()移动到保留的末尾.以下是安全/可取/正确的吗?
std::function< T() > make_t;
std::vector< T > t;
t.reserve( 100000 );
std::generate( t.begin(), t.begin() + 100000, make_T );
Run Code Online (Sandbox Code Playgroud)
我还以为我可以使用back_inserter,但接口适合我所拥有的(我有一个函数,每次访问时都会生成一个新的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 );
Run Code Online (Sandbox Code Playgroud)
std::back_inserter是<iterator>.