2017-10-30 2 views
-2

목록의 일부 요소를 제거하고 싶습니다. 아래 구현에서 7, 14, 26, 77을 제거하고 싶습니다. 마지막으로 17, 89, 45, 50을 인쇄합니다. 하지만 뭔가 이상하게 보입니다 (이 프로그램은 성공적으로 실행되지만 아무 것도 인쇄하지 않습니다). 아무도 도와 줄 수 있습니까?C++에서 목록의 일부 요소를 제거하는 방법

// remove from list 
#include <iostream> 
#include <list> 
using namespace std; 
int main() 
{ 
    int myints[]= {17,89,7,14,26,77,45,50}; 
    std::list<int> mylist (myints,myints+8); 
    std::list<int>::iterator p = mylist.begin(); 
    std::list<int>::iterator q = mylist.begin(); 
    advance(p, 2); 
    advance(q, 5); 

    for(p; p!=q; p++){ 
     mylist.remove(*p); 
    } 

    std::cout << "mylist contains:"; 
    for (std::list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it) 
    std::cout << ' ' << *it; 
    std::cout << '\n'; 

    return 0; 
} 
+4

을 기대했던, 당신을 무엇 'p ++'가해야한다고 생각하니? – Steve

+0

이 프로그램은 성공적으로 실행되지만 아무것도 출력하지 않습니다. – kdhug886

+0

처음에 얼마나 많은 요소를 mylist에 추가합니까? – 1201ProgramAlarm

답변

1

std::list::remove 목록에서 지정된 값 모든 요소를 ​​제거한다.

std::list::erase은 지정된 위치의 요소를 목록에서 제거합니다.

당신이 사용하려는 것은 삭제의 범위 과부하입니다 : 당신이 mylist``에서`p`를 제거 한 후 erase (iterator first, iterator last)

mylist.erase(p, q); 

할 것 당신이

+0

감사합니다. 또 다른 질문은, 내가 p와 q를 const_iterator로 바꾸면 어떻게 지울 수 있는가? – kdhug886

+0

@ kdhug886도 마찬가지입니다. 링크 된 참조 : "멤버 유형 iterator 및 const_iterator는 요소를 가리키는 양방향 반복기 유형입니다." (C++ 11) – pergy

+0

하지만이 두 줄을 바꿀 때 : list :: const_iterator p = mylist.begin(); 목록 :: const_iterator q = mylist.begin(); 오류 가 나타나지 : 오류 : 일치 함수를 호출하는 "표준 : __ cxx11 :: 목록 :: 소거 (표준 : __ cxx11 :: 목록 :: const_iterator를 & 표준 : __ cxx11 :: 목록 :: const_iterator &) ' mylist.erase (p, q); – kdhug886

관련 문제