2013-09-30 2 views
0

지우기 값

my_map.erase(my_map.begin(),my_map.end()); 

지도 또는지도에 대한 예를 들어 벡터

my_vector.erase(my_vector.begin(),my_vector.end()); 

을 내 벡터에서 모든 항목을 삭제하거나

지도의 안전한 방법입니다 벡터 구조체에는 해당 요소의 소멸자에서 할당 해제가 처리 된 요소가 포함됩니다.

Do 반복자 값 이()에 의해 반환 된이 아니며이 요소를 지우기 시작했기 때문에?

+3

괜찮지 만, 왜'명확()'를 호출하지? – juanchopanza

+0

@juanchopanza 호기심 그게 전부 야. 더 깨끗하고 깨끗한 상태로 깨끗하게 사용할 것입니다. –

답변

3

erase() 두 가지 방법 모두 두 번째 것을 제외하고 반복기 범위에서 작동하도록 설계되었습니다.

// erase elements in range [a,b) 
Iterator erase(Iterator a, Iterator b); 

은 그래서 당신이로 erase()를 호출하는 것이 안전합니다,하지만 당신은뿐만 아니라 두 경우 모두 clear()를 호출 할 수 있습니다.

1

그것은 또한 std::vector/std::map위한 erase(begin, end) 전화 소자 반복하는 erase 멤버 함수 및 반복기를 제공하는 다른 STL 컨테이너 (list, set, deque etc)에 유효한 안전하다. ,

c.erase(c.begin(), c.begin()); 
c.erase(c.end(), clend()); 

std::vector::erase(beg,end)는 범위 [BEG의 모든 요소를 ​​제거 두 범위는 유효 이하

은 당신이 유효 범위 (간청 단부)에 통과, erase 더 노력을 취하지 않는다 끝) 다음 요소의 위치를 반환합니다.

std::map::erase(beg,end) [beg, end] 범위의 모든 요소를 ​​제거하고 다음 위치를 반환합니다 (C++ 11 이전에는 아무 것도 반환하지 않음). 당신이 볼 수 있듯이 erase(begin(),end());clear()와 동일

void clear() noexcept; 
Effects: Behaves as if the function calls: 
      erase(begin(), end()); 

void assign(size_type n, const T& t); 
Effects: 
    erase(begin(), end()); 
    insert(begin(), first, last); 

:


는 STL 내부 구현에서는 같은 몇 가지 기능에 erase(begin,end)를 호출합니다.

또는, More Effective STL에서 제안 된 STL 컨테이너 취소 swap를 호출 할 수 있습니다

vector<Contestant> v; 
vector<Contestant>().swap(v); //clear v and minimize its capacity