是否有可能将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 :(得分: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);