c++ - boost 与 vector 成员函数的绑定(bind)

标签 c++ boost lambda

请帮我编写以下代码。我需要将字符串的长度添加到 vector 中。我不知道如何通过 boost 来实现它。到目前为止我最好的想法是:

boost::bind(add2Vect, boost::ref(lengths), L::_1)

其中add2Vect是一个简单的函数,它接受一个 vector 、一个字符串并将字符串的长度添加到 vector 中。 L 只是 boost::lambda 的简写

但是这个解决方案很糟糕,因为我必须创建一个离散函数。这不是 lambda 应该做的事情。

代码:

vector<string> strings;
strings.push_back("Boost");
strings.push_back("C++");
strings.push_back("Libraries");

vector<int> lengths;

for_each(strings.begin(), strings.end(),    
    // add lengths of strings to the vector 'lengths'

);

for_each(lengths.begin(), lengths.end(), 
    cout << L::_1 << " "
);  

最佳答案

Boost.Bind 和 Boost.Lambda 不是一回事。除非您使用 boost::lambda::bind,否则不能在 bind 中使用 lambda 占位符。

以下是您如何做您想要的事情:

std::transform(strings.begin(), strings.end(), std::back_inserter(lengths), 
               boost::bind(&std::string::size, _1));

如果你确实必须使用 for_each:

std::for_each(strings.begin(), strings.end(), 
             boost::bind(&std::vector<int>::push_back,
               &lengths, boost::bind(&std::string::size, _1)));

但是你应该使用 size_t 而不是 int。

关于c++ - boost 与 vector 成员函数的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465645/

相关文章:

c++ - 通过提供 rowIndices 列表从矩阵中获取行

c++ - 如何在 Linux 中将 .cpp 文件编译成 Windows 可执行 (.exe) 文件

结构解释的C++排序 vector

C++代码可视化

C# Func 委托(delegate)结合 lambda 表达式不正确

java - 为什么在 lambda 表达式中使用的变量应该是 final 或有效的 final

c++ - 两个线程之间通过公共(public)数据结构进行通信。设计问题

c++ - 不在 make 过程中命名类型

c++ - 覆盖专用模板

scala - def 和 lambda 的 val 有什么区别?