none
STL의 3중 리스트 형태 질문드립니다. RRS feed

  • 질문

  • 리스트를

    typedef struct_Smallest
    {
    int p1, p2
    }Smallest;

    typedef struct_BIG
    {
    Smallest small;
    }Big;

    typedef struct_MoreBig
    {
    std::list<BIG> bigInfo;
    }MoreBIg;

    typedef struct _Biggest
    {
    std::list<MoreBig> MoreBigInfo;
    }Biggest;

    typedef struct _Result // Result Bounding Box
    {
    std::list<Biggest> biggeestInfo;
    }Result;

    이렇게 되어있는 상태에서

    stl::list<Smallest> dataset1, dataset2, dataset3; 에 있는 데이터를 Result의 small 데이터에 삽입하고 싶습니다.

    혹시 접근 가능한 방법이 있을까요?

    2013년 9월 3일 화요일 오전 6:25

모든 응답

  • 순서대로 차곡 차곡 push_back 하시면 됩니다.

    sample Code..

    #include <iostream>
    using namespace std;
    
    
    #include <list>
    
    
    typedef struct _Smallest
    {
    	int p1, p2;
    }Smallest;
    
    typedef struct _BIG
    {
    	Smallest small;
    }Big;
    
    typedef struct _MoreBig
    {
    	std::list<Big> bigInfo;
    }MoreBIg;
    
    typedef struct _Biggest
    {
    	std::list<MoreBIg> MoreBigInfo;
    }Biggest;
    
    typedef struct _Result // Result Bounding Box
    {
    	std::list<Biggest> biggeestInfo;
    }Result;
    
    
    int main()
    {
    	Smallest tempSmall;
    	Big tempBig;
    	MoreBIg tempMoreBig;
    	Biggest tempBiggest;
    	Result tempResult;
    
    	list<Smallest> dataset1, dataset2, dataset3;
    
    	// dataset 세팅
    	// 반복문을 이용해 tempsmall 을 push
    	for(int i=1; i <= 10 ; i++)
    	{
    		tempSmall.p1 = i;
    		tempSmall.p2 = i*10;
    
    		dataset1.push_back(tempSmall);
    
    		tempSmall.p1 = i * 100;
    		tempSmall.p2 = i * 1000;
    		dataset2.push_back(tempSmall);
    
    		tempSmall.p1 = i * 2;
    		tempSmall.p2 = i * 4;
    		dataset3.push_back(tempSmall);
    	}
    
    
    	list<Smallest>::iterator itPos;
    	
    	itPos = dataset1.begin();
    	while(itPos != dataset1.end() )
    	{
    		tempBig.small.p1 = itPos->p1;
    		tempBig.small.p2 = itPos->p2;
    
    		tempMoreBig.bigInfo.push_back(tempBig);
    
    		advance(itPos, 1);
    	}
    
    	tempBiggest.MoreBigInfo.push_back(tempMoreBig);
    
    	tempResult.biggeestInfo.push_back(tempBiggest);
    
    	// Clear
    	tempMoreBig.bigInfo.clear();
    	tempBiggest.MoreBigInfo.clear();
    	
    
    	// dataset2
    	itPos = dataset2.begin();
    	while(itPos != dataset2.end() )
    	{
    		tempBig.small.p1 = itPos->p1;
    		tempBig.small.p2 = itPos->p2;
    
    		tempMoreBig.bigInfo.push_back(tempBig);
    
    		advance(itPos, 1);
    	}
    
    	tempBiggest.MoreBigInfo.push_back(tempMoreBig);
    
    	tempResult.biggeestInfo.push_back(tempBiggest);
    
    	// Clear
    	tempMoreBig.bigInfo.clear();
    	tempBiggest.MoreBigInfo.clear();
    
    	// dataset3
    	itPos = dataset3.begin();
    	while(itPos != dataset3.end() )
    	{
    		tempBig.small.p1 = itPos->p1;
    		tempBig.small.p2 = itPos->p2;
    
    		tempMoreBig.bigInfo.push_back(tempBig);
    
    		advance(itPos, 1);
    	}
    
    	tempBiggest.MoreBigInfo.push_back(tempMoreBig);
    
    	tempResult.biggeestInfo.push_back(tempBiggest);
    
    	// Clear
    	tempMoreBig.bigInfo.clear();
    	tempBiggest.MoreBigInfo.clear();
    
    	list<Biggest>::iterator itResultPos;
    
    	itResultPos = tempResult.biggeestInfo.begin();
    
    	printf("p1 : %d, p2 : %d\n", itResultPos->MoreBigInfo.front().bigInfo.front().small.p1, itResultPos->MoreBigInfo.front().bigInfo.front().small.p2);
    
    
    	return 0;
    }

    문제가 있을 수 있는 코드이나 참고만 하시면 될듯..

    2013년 10월 28일 월요일 오전 6:46