std::vector::erase 와 std::remove(계속 되 지 않 음)

3548 단어 STLC++
std::vector::erase
\#include 상세 내용: http://www.cplusplus.com/reference/vector/vector/erase/
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

Erase elementsRemoves from the vector either a single element (position) or a range of elements ([first,last)).
Return valueAn iterator pointing to the new location of the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence.
Example
// erasing from vector
#include 
#include 

int main ()
{
  std::vector myvector;

  // set some values (from 1 to 10)
  for (int i=1; i<=10; i++) myvector.push_back(i);

  // erase the 6th element
  myvector.erase (myvector.begin()+5);

  // erase the first 3 elements:
  myvector.erase (myvector.begin(),myvector.begin()+3);

  std::cout << "myvector contains:";
  for (unsigned i=0; i

Output
4.567913.erase 의 역할 은 교체 기 position 에 대응 하 는 요 소 를 삭제 하고 다음 요소 에 대응 하 는 교체 기 를 되 돌려 주 는 것 이다.
인터넷 에 이런 erase 내부 실현 이 있 는 것 을 보고 erase 내부 에서 도대체 무엇 을 했 는 지 연구 하고 싶 습 니 다.
myvector contains: 4 5 7 8 9 10

std::copy
#include
iterator erase(iterator position)
{
  if(position + 1 !=end())
  {
     copy(position + 1,finish,position);
  }
  finish--;
  destroy(finish);
  return position;
}

Copy range of elementsCopies the elements in the range [first,last) into the range beginning at result. The function returns an iterator to the end of the destination range (which points to the element following the last element copied). The ranges shall not overlap in such a way that result points to an element in the range [first,last). For such cases, see copy_backward. The behavior of this function template is equivalent to:
template 
  OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);
erase 에서 copy 의 역할 은 position+1 에서 finish 사이 의 데 이 터 를 position 으로 시작 하 는 위치 로 이동 하 는 것 이다.즉,한 자리 앞으로 이동 하 는 것 이다.
여 기 는 잘 모 르 는 곳 이 있 습 니 다.
1.finish 는 무엇 입 니까?
2.왜 앞으로 이동 한 후 destroy(finish)해 야 합 니까?앞으로 이동 하면 자동 으로 position 요 소 를 finish 위치 로 이동 합 니까?
std::allocator::destroy
#include
template
  OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
  while (first!=last) {
    *result = *first;
    ++result; ++first;
  }
  return result;
}

Destroy an object
Destroys in-place the object pointed by p.
Notice that this
does not deallocate the storage for the element (see member deallocate to release storage space).
The function uses U's destructor, as if the following code was used:
4.567913.여기 에는 deallocate 요소 의 저장 공간 이 없다 고 하 는데 석조 함수 가 호출 되 었 습 니까?제 가 코드 를 써 서 erase 를 연구 해 봤 으 면 좋 겠 어 요.
template 
  void destroy (U* p);
Output:
p->~U();
Round One 은 이해 하기 어렵 지 않 습 니 다.이것 은 erase 를 설명 할 때 석조 함 수 를 호출 하지 않 았 습 니 다.이것 은 제 가 Round One 에서 vector 에 저장 한 것 은
포인터
대상(Object)이 므 로 포인터 의 분석 함수 가 호출 되 지 않 았 습 니 다.
참고:  http://www.cplusplus.com/forum/general/63770/
Round Two 는 복잡 합 니 다.

좋은 웹페이지 즐겨찾기