2016-11-27 7 views
-2

反復の目的でautoを使用することは可能ですか?スマートポインタと自動反復

コードでエラーが発生する可能性がありますか?エラーのある行はコメントされています。私はスマートなポインタが好きなので好奇心が強いですが、タイプを少なくしたいと思います。私はC++で素早くプロトタイプを作成するというアイデアが気に入っています。もちろん

 deque<shared_ptr<Vehicle>> data; 
    data.push_back(shared_ptr<Vehicle>(new Vehicle("aba"))); 
    data.push_back(shared_ptr<Vehicle>(new Vehicle("bobo"))); 
    data.push_back(shared_ptr<Vehicle>(new Vehicle("cici"))); 
    data.push_back(shared_ptr<Vehicle>(new Vehicle("dede"))); 
    data.push_back(shared_ptr<Vehicle>(new Vehicle("efee"))); 


    for(auto i = data.begin(); i != data.end;) //error 
    { 
     if((*i)->getName() == "cici") 
     { 
      i = data.erase(i);   //Only works with C++11. i on left side is next valid pos. 

      break; 
     } 
     else 
      ++i; 
    } 
+0

あなたの実際の質問は、しかし何を意味推測のだろうか? – Charles

+4

data.end()を読み込む必要があります。 ? – moof2k

+1

エラーメッセージは何ですか? – Galik

答えて

3

あなたが使用自動:

for(auto i = data.begin(); i != data.end() ;) { // look at condition 
    ... 
} 

あなたは消去のイテレータを必要としない場合でも、範囲のために使用することができます

for (auto& sptr : data) { 
    ... 
} 
3

autoが正常に動作します、問題はあなたのコードにいくつかの誤りがあることです。

for(auto i = data.begin(); i != data.end;) 

for(auto i = data.begin(); i != data.end();) 

そして

i = list.erase(i); 

あるべき変数listここで定義されていない、私はあなたが

i = data.erase(i); 
+0

はい、あなたは正しいです。申し訳ありませんが、他のポスターは数分であなたを倒しました。私はあなたをアップアップします。ありがとう!! – code