[List 원하는 위치의 데이터 삭제]
#include <list>
#include <algorithm>
typedef struct {
word buff;
} TEST;
// 사용자가 새로 정의. 구조체 이면서 함수 처럼 동작.
// 즉, 구조체이나 이터네이터로 동작.
struct CompareList : public std::binary_function < TEST*, char, bool >
{
bool operator() ( const TEST* pData, const word test ) const
{
return pData->buff == test ; // 같으면 true, 다르면 flase
}
};
std::list<TEST*> TestList;
////////////////////////////// Data input. //////////////////////////////
TestList.push_back( new TEST );
TestList.push_back( new TEST );
TestList.push_back( new TEST );
TestList.push_back( new TEST );
//////////////////////////// Data output //////////////////////////////
for( std::list<TEST*>::iterator iter = TestList.begin(); iter != TestList.end(); ++iter )
{
printf( "Test buffer = %s \n", (*iter)->buff );
}
///////// find data 처음 ~ 끝까지 검색하며 CompareList() 의 조건으로 comparevalue 를 찾아라 ///////
std::list<Test*>::iterator iter = std::find_if( TestList.begin(), TestList.end(), CompareList(), comparevalue );
#include <list>
#include <algorithm>
typedef struct {
word buff;
} TEST;
// 사용자가 새로 정의. 구조체 이면서 함수 처럼 동작.
// 즉, 구조체이나 이터네이터로 동작.
struct CompareList : public std::binary_function < TEST*, char, bool >
{
bool operator() ( const TEST* pData, const word test ) const
{
return pData->buff == test ; // 같으면 true, 다르면 flase
}
};
// 사용자가 새로 정의. 구조체 이면서 함수 처럼 동작.
// 즉, 구조체이나 이터네이터로 동작.
struct CompareList2
{
CommpareList2();
CommpareList2( word param ) { this->param = param; }
word param;
bool operator() ( const TEST& hs ) const
{
return ( hs.buff == this->param );
}
};
std::list<TEST*> TestList;
////////////////////////////// Data input. //////////////////////////////
TestList.push_back( new TEST );
TestList.push_back( new TEST );
TestList.push_back( new TEST );
TestList.push_back( new TEST );
//////////////////////////// Data output //////////////////////////////
for( std::list<TEST*>::iterator iter = TestList.begin(); iter != TestList.end(); ++iter )
{
printf( "Test buffer = %s \n", (*iter)->buff );
}
word comparevalue = 0;
// find_if 첫번째///////// find data 처음 ~ 끝까지 검색하며 CompareList() 의 조건으로 comparevalue 를 찾아라 ///////
std::list<Test*>::iterator iter = std::find_if( TestList.begin(), TestList.end(), CompareList(), comparevalue );
// find_if 두번째
std::list<Test*>::iterator iter2 = std::find_if( TestList.begin(), TestList.end(), CompareList2(comparevalue) );
// 걍 검사
std::list<TEST*>::iterator iter_ = std::find( TestList.begin(), TestList.end(), comparevalue );
// erase func. 해당 위치를 삭제 한다.
if( iter != TestList.end() )
{
TestList.erase( iter );
}
=============================================================================
- 핵심 :
list.erase( iterator );
std::binary_function<Test*, char, bool>
std::find_if( list.begin(), list.end(), CompareList, CompareValue );
'[ Programing ] > STL & Booster' 카테고리의 다른 글
[STL] Binary search ( qsort, bsearch ) (0) | 2010.06.29 |
---|---|
[STL] Map, MultiMap 삽입, 검색, 삭제 (3) | 2010.01.31 |
[STL] sort( vecStock.begin(), vecStock.end(), SortCredit ); 정렬 (0) | 2010.01.31 |
[STL] List 기타 간단 기능 (0) | 2009.12.24 |
[STL] List 입력과 출력 부분 (0) | 2009.12.24 |