vector가 동적 "배열"이라더니 임의 위치에 원소를 삽입하는 기능의 함수는 없는듯..
크기를 늘리고 원소를 복사하고 하는 작업이 필요한 것 같다.
그냥 순차적으로 원소를 삽입하고 출력하는 예제. (소트 알고리즘 추가)
%%
STL이라는거 개념적으로 어려운 내용이 많아서 그렇지
간단하게 쓰기에는 아주 굿~!!
조금 더 전문적인 내용은.... 글쎄..
크기를 늘리고 원소를 복사하고 하는 작업이 필요한 것 같다.
그냥 순차적으로 원소를 삽입하고 출력하는 예제. (소트 알고리즘 추가)
#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이라는거 개념적으로 어려운 내용이 많아서 그렇지
간단하게 쓰기에는 아주 굿~!!
조금 더 전문적인 내용은.... 글쎄..