STL - vector

vector 을 사용하면서,... 

이전에 list, map, multimap 에서 삭제 하던거랑 살짝 틀리다.
젠장할...시간낭비를 했다.

vector 은 잘 사용하지도 않는데...라고 주절주절..그만 떠들고 정리하고 얼른..집중하자 
내가 정리하고 하는 부분만 정리하자!

STL 에서 list, map, multimap 를 자주쓰는데..(내가!)
삭제 할때, 왜 vector 은 위의 3개와 틀린지 모르겠다. 그냥 정리해둔다. !

STL - list, map, multimap 의 삭제

void CUserParty::DeleteDataAll()

{

/*

CClientUser *del = NULL;

m_iterator = m_MultiMap.begin();


while( m_iterator != m_MultiMap.end() )

{

del = m_iterator->second;

     m_MultiMap.erase( m_iterator++ );

delete del;

}

m_MultiMap.clear();

*/

}

 
삭제하는 루틴은 저런방법을 이용한다.
 
참고로 아래의 형태이니깐, 응용이 가능하다고 생각함!

typedef multimap< int, CClientUser*> mMAPUSER;

typedef mMAPUSER::iterator mMAPUSERITERATOR; 



그리고 이제 문제가 되었던 vector은 어떠하신가 보자.

vector 은 아래와 같이 선언함!

typedef struct _jd_index

{

vector<int> Indexlist;

}ST_JD_INDEX;


typedef vector<ST_JD_INDEX*> JACCARDDISTANCE;  


 추가할 때는 

ST_JD_INDEX *index = new ST_JD_INDEX;

index->Indexlist.push_back(i);

m_JaccardDistanceList.push_back( index );


읽고 쓸 때

// 하나만 검사!( 다 똑같기 때문에)m_JaccardDistanceList[j]->Indexlist.push_back(i);
int index = m_JaccardDistanceList[j]->Indexlist[0];
m_JaccardDistanceList[j]->Indexlist.push_back(i); 

 
 삭제 할 때 

JACCARDDISTANCE::iterator iterator = m_JaccardDistanceList.begin();

size = m_JaccardDistanceList.size();

while( iterator != m_JaccardDistanceList.end() )

{

 del = *iterator;

       delete del;

       iterator = m_JaccardDistanceList.erase(iterator);

}

m_JaccardCount = 0;

m_JaccardDistanceList.clear();



삭제 할때, list, map, multimap, 그리고  vector 하고의 차이점....인가?
뭐..무튼 삭제 할때 방법이 틀리니깐 정리해두자. 


 

'Library > STL' 카테고리의 다른 글

[STL] vector, list  (0) 2013.04.23

댓글

Designed by JB FACTORY