2017-10-30 4 views
-2

リストの中のいくつかの要素を削除したい、以下の実装では7,14,26,77を削除したいと思います。最後に17,9O、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

しかし、私はこれらの2つの行を変更するとき: リスト :: const_iterator p = mylist.begin(); リスト :: const_iterator q = mylist.begin(); エラーが表示されます。 エラー:STD」への呼び出しに該当する機能:: __ cxx11 ::リスト ::消去(STD :: __ cxx11 ::リスト :: const_iteratorの&、のstd :: __ cxx11 ::リストを:: const_iterator&) ' mylist.erase(p、q); – kdhug886

関連する問題