c++ - 将值 vector 复制到一行中的对 vector

标签 c++ boost boost-bind stl

我有以下类型:

struct X { int x; X( int val ) : x(val) {} };
struct X2 { int x2; X2() : x2() {} };

typedef std::pair<X, X2>      pair_t;
typedef std::vector<pair_t>   pairs_vec_t;
typedef std::vector<X>        X_vec_t;

我需要用 X_vec_t 的值初始化 pairs_vec_t 的实例。我使用以下代码,它按预期工作:

int main()
{
  pairs_vec_t ps;
  X_vec_t xs; // this is not empty in the production code

  ps.reserve( xs.size() );

  { // I want to change this block to one line code.
    struct get_pair {
      pair_t operator()( const X& value ) { 
        return std::make_pair( value, X2() ); }
    };
    std::transform( xs.begin(), xs.end(), back_inserter(ps), get_pair() );
  }

  return 0;
}

我想做的是使用 boost::bind 将我的复制 block 减少到一行。此代码无效:

for_each( xs.begin(), xs.end(), boost::bind( &pairs_vec_t::push_back, ps, boost::bind( &std::make_pair, _1, X2() ) ) );

我知道它为什么不工作,但我想知道如何在不声明额外函数和结构的情况下让它工作?

最佳答案

是这样的吗?

using boost::lambda;
X2 x;
transform(..., (bind(std::make_pair<X,X2>, _1, ref(x))));

目前我无法核实,但如果从内存中正确记忆起,上述内容是有效的。

关于c++ - 将值 vector 复制到一行中的对 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732694/

相关文章:

c++ - 将 unique_ptr 的容器传递给构造函数?

c++ - boost::container::small_vector 似乎没有就地分配

c++ - 你如何将 boost::bind 对象传递给函数?

c++ - 如何使用 boost::spirit 解析数学表达式并将其绑定(bind)到函数

c++ - 如何使用通用函数/插槽连接到 boost::signal?

c++ - 访问冲突调用非导出的 DLL 函数 C++

c++ - 如果二维数组不是双指针,那为什么会这样呢?

c++ - 如何在 C++ 中使交换功能更快?

c++ - 使用boost::thread的Actor计算模型

c++ - Boost::geometry::multi_polygon 的负缓冲区