智能指针和使用auto迭代

时间:2016-11-27 22:54:36

标签: c++ c++11 c++14

是否有可能将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; 
    }

2 个答案:

答案 0 :(得分:3)

当然你使用auto:

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

如果你不需要用于擦除的迭代器,你甚至可以使用range-for:

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

答案 1 :(得分: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);