C++ 智能指针和自动迭代

C++ 智能指针和自动迭代,c++,c++11,c++14,C++,C++11,C++14,是否可以使用auto进行迭代 代码会产生错误,但我想知道这是否可能。注释了带有错误的行。我很好奇,因为我喜欢智能指针,但我想少打字。。。我喜欢用C++快速原型制作的想法。p> deque<shared_ptr<Vehicle>> data; data.push_back( shared_ptr<Vehicle>(new Vehicle("aba")) ); data.push_back( shared_ptr<Vehicl

是否可以使用auto进行迭代

代码会产生错误,但我想知道这是否可能。注释了带有错误的行。我很好奇,因为我喜欢智能指针,但我想少打字。。。我喜欢用C++快速原型制作的想法。p>
        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; 
    }
deque数据;
数据。后推(共享ptr(新车(“aba”));
数据。后推(共享ptr(新车(“bobo”));
数据。后推(共享ptr(新车(“cici”));
数据。后推(共享ptr(新车(“dede”));
数据。后推(共享ptr(新车(“efee”));
for(auto i=data.begin();i!=data.end;)//错误
{
如果((*i)->getName()=“cici”)
{
i=data.erase(i);//仅适用于C++11。左侧的i是下一个有效位置。
打破
}
其他的
++一,;
}

当然可以使用自动:

for( auto i = data.begin(); i != data.end() ; ) {  //  look at condition
    ...
} 
如果不需要迭代器进行擦除,甚至可以使用range for:

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

auto
工作正常,问题是代码中有几个错误

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

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

这里没有定义变量
列表
,我想您的意思是

i = data.erase(i); 

但是,您的实际问题是什么?应该读取data.end()?错误信息是什么?对不起,穆克,你的更正是关键。。。更改为()并可以正常工作。我会给你的答案,如果你张贴作为答案。。。但克里斯托弗·波斯特首先给出了答案。不过我还是选了你…我想知道为什么这被否决了。仅仅因为你没有得到被选为答案的分数,并不意味着你应该报复。特别是因为我给了每个人提供了正确答案的分数,并且公平地解释了我为什么给克里斯分数。是的,你是对的。对不起,另一张海报比你快了几分钟。我会投票给你。谢谢
i = data.erase(i);