STL iteraotor 사용 예제

2007. 3. 26. 19:52개발

1.       vector, deque, list 에서의 erase 사용 예:

erase() 할 경우 erase 의 리턴값에 pos 이 있으므로 이 값을 기준으로 다음 pos 을 구하면 됩니다

 

deque<DATA>::iterator pos = begin();

while (pos != end())

{

        if (pos->m_nKey == nID)

        {

                pos = erase(pos);

        }

        else

                pos++;

}

 

2.       set, map 에서의 erase 방법
map erase vector 에서 처럼 pos 를 리턴하지 않기 때문에 아래처럼 좀 복잡한 방법을 써야 합니다.

 

for (pos = map.begin(); pos != map.end(); )

{

    if (pos->second == value)

          map.erase(pos++);

   else

         ++pos;

}

 

3.       reverse iterator 사용예
iterator → reverse_iterator
begin → rbegin
end → rend
식으로 변경해서 사용하면 끝~

 

map<data, value>::reverse_iterator it;

for (it = m_mapData.rbegin(); it != m_mapData.rend(); ++it)

{

    ...

}

 

 

4.       mulimap iterator 사용예
lower_bound upper_bound 를 통해 iterator navigation 하기

multimap<string, string> multiData;

multimap<string, string>::iterator it;

/* some code here */

multiData.insert(make_pair("abc", "111"));
multiData.insert(make_pair("abc", "222"));
multiData.insert(make_pair("abc", "333"));
multiData.insert(make_pair("def", "111"));
string sKey = "abc";

for (it = multiData.lower_bound(sKey);

            it != multiData.upper_bound(sKey); ++it)

{

  /* some code here */

}