>php教程 >PHP开发 >벡터의 삭제 작업

벡터의 삭제 작업

高洛峰
高洛峰원래의
2016-11-22 15:24:081720검색

최근 책을 읽다가 우연히 벡터의 삭제 작업에 대한 세부 사항을 발견했습니다. 이 삭제 작업의 경우 이 삭제 작업에는 두 가지 형식이 있다는 것을 누구나 알고 있습니다. (1) 단일 요소 삭제, 매개변수는 반복자 변수입니다. (2) 간격 요소 삭제, 매개변수는 시작과 끝입니다. 세부정보는 단일 요소가 삭제될 때 발생하는 특정 사항입니다.

예: 다음과 같이 초기화된 벡터가 있습니다. vector va{0,1,2,2,3,4,5}. 벡터에서 동일한 요소를 삭제합니다. 2로!

일반적으로 코드는 다음과 같이 작성됩니다.

#include <vector>
 #include <iostream>

int main() {     std::vector<int> va{ 1,2,3,4,4,5,6 };     std::vector<int> vb(va);     for (auto i = va.begin();i != va.end(); i++)     {         if (*i == 4)         {             i = va.erase(i);         }     }     for (auto i : va) { std::cout << i << "  "; }     return 0; }

얼핏 보면 잘못된 것은 없지만 결과는 예상치 못한 결과입니다

벡터의 삭제 작업

결과가 왜 이런가요? 곰곰이 생각해 보니 삭제에 오류가 있었던 것으로 나타났는데, if 조건이 성립되면 벡터에서 조건에 맞는 요소를 삭제하는 것이 핵심이다. 삭제 작업을 수행하면 반환된 값은 현재 삭제된 반복자의 다음 위치를 나타냅니다. 그런 다음 루프가 다시 반복되면 반복자가 한 위치만큼 뒤로 이동하여 동일한 요소가 삭제됩니다. 삭제되었습니다.

첨부된 철자가 정확합니다:

#include <vector> #include <iostream>

int main() {     std::vector<int> va{ 1,2,3,4,4,5,6 };     std::vector<int> vb(va);     auto iter = vb.begin();     while(iter!=vb.end())     {         if (iter != vb.end())         {             if (*iter == 4)             {                 iter = vb.erase(iter);             }             else 
            { iter++; }         }     }     for (auto j : vb)     {         std::cout << j << "  ";     }     return 0; }
#include <vector>  #include <iostream>


int main() {     std::vector<int> va{ 1,2,3,4,4,5,6 };     for (auto i = va.begin();i != va.end(); )     {         if (*i == 4)         {             i = va.erase(i);         }         else { i++; }     }     for (auto i : va)     {         std::cout << i << "  ";     }     return 0; }


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.