2013-01-17 2 views
1

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++ 03 괜찮에서 작동하는 모든 청소 솔루션을 C++ (11)를 사용할 수 없습니다.

struct Wrap 
{ 
    Wrap(int data): data(data) {} 
    int data; 
}; 

을 그리고 당신은 단순히이 수행 할 수 있습니다 : 부스트 람다에게

+0

XY 질문입니까? '벡터 '을 만들거나'boost :: lambda'를 사용하는 것이 목표입니까? – Pubby

+0

'벡터 '을 생성하십시오. – balki

답변

1

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을 참조하십시오.

+0

감사합니다. 그러나 나는 분리 된 기능을 만드는 것을 피하려고 노력했다. 불가능한 것처럼 보입니다. 그래서 나는이 해결책을 받아 들일 것이다. – balki

1

를 사용하지 않아도 당신은 Wrap에 대한 생성자를 정의해야

transform(v.begin(),v.end(), back_inserter(vw), constructor<Wrap>()); 

constructorboost/lambda/construct.hpp에서 온다, 그것은 생성자로 랩 함수 객체.

+0

감사합니다. 하지만 내 진짜 유스 케이스. 이미 일부 값으로 채워진 구조체가 있습니다. 구조체를 복제하고 멤버 중 하나를 변경하려고합니다. – balki

+0

멤버를 변경할 때 수정 된 구조체를 반환 할 수 없으므로이 작업을 수행하는 함수를 작성해야합니다. – yiding

관련 문제