STL vector 컨테이너의 간단한 사용예
2008. 2. 17. 14:30
vector가 동적 "배열"이라더니 임의 위치에 원소를 삽입하는 기능의 함수는 없는듯..
크기를 늘리고 원소를 복사하고 하는 작업이 필요한 것 같다.

그냥 순차적으로 원소를 삽입하고 출력하는 예제. (소트 알고리즘 추가)


#include 
#include 
#include 

typedef struct _testdb
{
        char            str[128];
        int                     num;

} TestDB, * PTestDB;

bool CompareDB( const TestDB& First, const TestDB& Second )
{
 bool bFlag = false;

 if ( strcmp( First.str, Second.str) < 0 )      // 오름차순 정렬
  bFlag = true;

 return bFlag;
}

int main( void )
{
        std::vector     db;
        std::vector::iterator   it;

        {
                TestDB                                  tempDB1;
                memset( &tempDB1, 0, sizeof( TestDB ) );

                tempDB1.num = 104;
                strcpy( tempDB1.str, "test 4" );
                db.push_back( tempDB1 );

                tempDB1.num = 23;
                strcpy( tempDB1.str, "test 3" );
                db.push_back( tempDB1 );

                tempDB1.num = 32;
                strcpy( tempDB1.str, "test 2" );
                db.push_back( tempDB1 );

                tempDB1.num = 501;
                strcpy( tempDB1.str, "test 1" );
                db.push_back( tempDB1 );
        }

        int i = 0;

        std::cout << "list in vector ----------------------" << std::endl;

        for ( i = 0, it = db.begin(); it != db.end(); it++, i++ )
                std::cout << "\t idx : " << i << " - it->str = \"" << it->str << "\", it->num = " << it->num << std::endl;


        std::cout << std::endl;
        std::cout << "list in vector (array type) ---------" << std::endl;


        for ( i = 0, it = db.begin(); it != db.end(); it++, i++ )
                std::cout << "\t idx : " << i << " - db[" << i << "].str = \"" << db[i].str << "\", db[" << i << "].num = " << db[i].num << std::endl;

        std::cout << std::endl;

        TestDB                                  tempDB2;
        memset( &tempDB2, 0, sizeof( TestDB ) );


        std::cout << "insert front / end ------------------" << std::endl;

        strcpy( tempDB2.str, "test 5" );
        tempDB2.num = 15;
        db.insert( db.begin(), tempDB2 );       // insert data at begin point

        tempDB2.num = 205;
        db.insert( db.end(), tempDB2 );         // insert data at end point

        for ( i = 0, it = db.begin(); it != db.end(); it++, i++ )
                std::cout << "\t idx : " << i << " - it->str = \"" << it->str << "\", it->num = " << it->num << std::endl;

        std::cout << std::endl;


        std::cout << "After Sort  ------------------------" << std::endl;

        memset( &tempDB2, 0, sizeof( TestDB ) );
        strcpy( tempDB2.str, "test 6" );
        tempDB2.num = 324;
//      it = db.at( 3 );                        // 임의 위치에 삽입은 안되는 듯 하다. 
//      db.insert( it, tempDB2 );         //     컴파일 에러

        stable_sort( db.begin(), db.end(), CompareDB );
        for ( i = 0, it = db.begin(); it != db.end(); it++, i++ )
                std::cout << "\t idx : " << i << " - it->str = \"" << it->str << "\", it->num = " << it->num << std::endl;

        std::cout << std::endl;


        return 0;
}
컴파일해서 실행하면

namacin@neptune ~/Study/stl $ ./vector_test
list in vector ----------------------
         idx : 0 - it->str = "test 4", it->num = 104
         idx : 1 - it->str = "test 3", it->num = 23
         idx : 2 - it->str = "test 2", it->num = 32
         idx : 3 - it->str = "test 1", it->num = 501

list in vector (array type) ---------
         idx : 0 - db[0].str = "test 4", db[0].num = 104
         idx : 1 - db[1].str = "test 3", db[1].num = 23
         idx : 2 - db[2].str = "test 2", db[2].num = 32
         idx : 3 - db[3].str = "test 1", db[3].num = 501

insert front / end ------------------
         idx : 4 - it->str = "test 5", it->num = 15
         idx : 0 - it->str = "test 4", it->num = 104
         idx : 1 - it->str = "test 3", it->num = 23
         idx : 2 - it->str = "test 2", it->num = 32
         idx : 3 - it->str = "test 1", it->num = 501
         idx : 5 - it->str = "test 5", it->num = 205

after sort --------------------------
         idx : 0 - it->str = "test 1", it->num = 501
         idx : 1 - it->str = "test 2", it->num = 32
         idx : 2 - it->str = "test 3", it->num = 23
         idx : 3 - it->str = "test 4", it->num = 104
         idx : 4 - it->str = "test 5", it->num = 15
         idx : 5 - it->str = "test 5", it->num = 205

와 같은 결과를 보여준다.

%%
STL이라는거 개념적으로 어려운 내용이 많아서 그렇지
간단하게 쓰기에는 아주 굿~!!

조금 더 전문적인 내용은.... 글쎄..


써드아이
써드아이