gpt4 book ai didi

c++ - 使用 boost lambda 设置结构成员

转载 作者:行者123 更新时间:2023-11-30 04:21:37 26 4
gpt4 key购买 nike

我正在尝试创建 vector<Wrap>v 中的值相同.我尝试了以下组合,但没有用!

using namespace std;

struct Wrap
{
int data;
//Other members
};

int main()
{
int a[10] = {2345,6345,3,243,24,234};
vector<int> v(&a[0],&a[10]);
Wrap w;
//Populate other members of w
vector<Wrap> vw;
using namespace boost::lambda;
//transform(v.begin(),v.end(), back_inserter(vw), (bind(&Wrap::data,&w,_1), boost::lambda::constant(w)));
//transform(v.begin(),v.end(), back_inserter(vw), bind(&Wrap::data,&w,_1), boost::lambda::constant(w));
//transform(v.begin(),v.end(), back_inserter(vw), ((w.data = _1), boost::lambda::constant(w)));
//transform(v.begin(),v.end(), back_inserter(vw), ((w.data = _1), w));
cout << vw.size() << endl;
BOOST_FOREACH(Wrap w, vw)
{
cout << w.data << endl;
}
}

注意:还不能使用 C++11

更新 任何适用于 C++03 的干净解决方案都可以。不需要使用 boost lambda

最佳答案

使用std::transform() 并指定二元运算函数。例如:

#include <iostream>
#include <vector>
#include <algorithm>

struct Wrap
{
int data;
};

Wrap set_data(int a_new_data, Wrap a_wrap)
{
a_wrap.data = a_new_data;
return a_wrap;
}

int main()
{
int a[10] = { 2345, 6345, 3, 243, 24, 234 };
const size_t A_SIZE = sizeof(a) / sizeof(a[0]);
std::vector<Wrap> vw(A_SIZE);

std::transform(a, a + A_SIZE, vw.begin(), vw.begin(), set_data);

std::cout << vw[0].data << ','
<< vw[1].data << ','
<< vw[5].data << ','
<< vw[9].data << '\n';
return 0;
}

参见 http://ideone.com/DHAXWs 的演示.

关于c++ - 使用 boost lambda 设置结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14375503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com