2016-11-27 89 views
-2

是否有可能使用自动迭代的目的是这样的?智能指针和迭代与自动

代码会产生错误,但我想知道是否有可能。有错误的行被评论。我很好奇,因为我喜欢聪明的指针,但我想输入更少......我喜欢用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