使用 boost::lambda 复制容器

发布于 2024-11-05 19:55:20 字数 720 浏览 0 评论 0 原文

我在这里学习如何使用 boost::lambda 。我的一个问题是关于成员函数调用。这只是一个测试,我想使用 boost::lambda 来完成此操作,因为显然有一百万种方法可以将元素从一个容器复制到另一个容器。

我有一个 list ,它有 3 个元素:

std::list<int> a;
a.push_back(2);
a.push_back(3);
a.push_back(4);

还有一个 vector

vector<int> b;

我正在尝试执行以下操作:对于 a 中的每个元素,将其推送回到b。这是我的镜头:

std::for_each(a.begin(), a.end(), (b ->* (&std::vector<int>::push_back))(_1) );

问题是它不接受成员函数调用,告诉:

no match for 'operator->*' in 'b ->* &std::vector >::push_back'

我尝试了一些其他方法,但它们也不起作用。

提前致谢。

I'm here learning how to use boost::lambda. One question I have is about member function calling. It's just a test, and I'd like to do this with boost::lambda, as there are, obviously, half a million ways to copy the elements from one container to another container.

I have a list<int> which has 3 elements:

std::list<int> a;
a.push_back(2);
a.push_back(3);
a.push_back(4);

And a vector<int>:

vector<int> b;

I'm trying to do the following: for each element in a, push it back in b. Here's my shot:

std::for_each(a.begin(), a.end(), (b ->* (&std::vector<int>::push_back))(_1) );

The problem is that it's not accepting the member function call, telling:

no match for ‘operator->*’ in ‘b ->* &std::vector<int, std::allocator<int> >::push_back’

I tried some other ways, but they didn't work either.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

魄砕の薆 2024-11-12 19:55:20

你尝试过这样的事情吗?

for_each(a.begin(), a.end(), bind(&std::vector<int>::push_back, &b, _1));

Did you try something like this?

for_each(a.begin(), a.end(), bind(&std::vector<int>::push_back, &b, _1));
云柯 2024-11-12 19:55:20

我建议您使用 Boost.Phoenix,它是 C++ 中 lambda 工具的更好实现,并且已经具有 std 容器方法的惰性版本。

http://www.boost.org /doc/libs/1_46_1/libs/spirit/phoenix/doc/html/index.html

Phoenix 目前隐藏在 Spirit 内部,但计划在 1.47 中成为一等提升公民即将到期。

I would advise you to use Boost.Phoenix with is a better implementation of lambda facilities in C++ and already has lazy version of std containers methods.

http://www.boost.org/doc/libs/1_46_1/libs/spirit/phoenix/doc/html/index.html

Phoenix is currently hidden inside Spirit but it is planned to become a first class boost citizen in 1.47 which is due soon.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文