c++ - 我在这里支付违约 build 费用吗?如果支付的话,我可以避免吗?

标签 c++ boost c++11

在构建 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/

相关文章:

c++ - 无法访问类的 vector 成员

c++ - 列表及其第一个组件的继承

c++ - boost spirit : combining preparsing with keyword parser and with Nabialek trick

python - boost Python : stop interpreter

c++ - CMake 链接库 (.a/.so)

c++ - 一次生成 1000 个随机卡片组洗牌 C++

C++ 模板特化语法

C++ Boost 库几何.hpp

c++ - 忽略函数默认参数

c++ - 为什么 C++11 标准中没有常量 pi 的定义?