C++ 智能指针和自动迭代
是否可以使用auto进行迭代 代码会产生错误,但我想知道这是否可能。注释了带有错误的行。我很好奇,因为我喜欢智能指针,但我想少打字。。。我喜欢用C++快速原型制作的想法。p>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
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);