728x90
반응형

erase 3

[C++] STL map에서 erase 사용 시 주의점

for (auto itr = m_elems.begin(); itr != m_elems.end(); ++itr) { if (itr->second->locking && !ignore_locked_obj) continue; m_elems.erase(itr); } map을 사용하여 조건을 통한 삭제를 실행하려 했는데, runtime error가 발생한다. 조건을 만족하는 iterator가 나타났을 때 해당 iterator를 지워버리면 해당 iterator는 end가 되어 버렸다. erase 하면 pos 값이 날아가버려서 그런가 보다. 미리 복사해 둬야 에러를 발생시키지 않는다. for (auto itr = m_elems.begin(); itr != m_elems.end();) { if (itr->second->..

[C++] string 공백 문자 제거

string에서 특정 문자를 제거하려면 erase 함수를 사용해야 한다. 좌측 문자열을 제거하기 위해서는 erase ( 시작 위치, 개수)를 사용하고, 우측 문자열을 제거하기 위해서는 rease (크기)를 사용한다. text.erase(0, npos); text.erase(npos); 특정 문자를 제거하기 위해서는 해당 문자가 아닌 위치를 우선 찾아야 한다. 이때 좌측부터 찾을 때에는 find_first_not_of를 우측부터 찾을 때에는 find_last_not_of를 사용한다. npos = text.find_first_not_of(' '); npos = text.find_last_not_of(' '); 두 함수를 이용하여 좌측, 우측 공백 문자를 제거해보자. string text(" shared pt..

728x90
반응형