std::vector::erase 와 std::remove(계속 되 지 않 음)
\#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 는 복잡 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STL 원자로 작동먼저 전연 두 갈래 나무의 정의를 살펴보자. 만약에 두 갈래 나무의 깊이를 h로 설정하면 h층을 제외한 다른 각 층(1~h-1)의 결점은 모두 최대 개수에 달하고 h층의 모든 결점은 연속적으로 맨 왼쪽에 집중된다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.