boost :: ptr_vector<> :: iterator是否可以循环使用?

时间:2014-07-31 17:08:05

标签: c++ boost

有可能吗?

像这样:

    while(itr!=list.end())
    {

        ++itr; //is it ok?
    }

而不是:

for(itr=list.begin();itr!=list.end();++itr)

我想这只是个人的好感但我更喜欢一点点。谢谢

2 个答案:

答案 0 :(得分:1)

假设你在循环之前有一个itr=list.begin(),那很好。

答案 1 :(得分:1)

for - 风味循环:

for(init-stmt; test-expression; alter-stmt)
{
    // code
}

相当于:

init-stmt;
while (test-expression)
{
    //code
    alter-stmt
}

如果你的init-stmt逻辑在你的while循环的前导码中与你的for循环相同,那么就不用担心了。在您的情况下,它将显示为:

itr = list.begin();
while (itr != list.end())
{
    // code
    ++itr;
}

可变生命周期

值得注意的是init-stmt中声明的变量的生命周期可以使这些变量不同。例如:

for (auto itr = list.begin(); itr != list.end(); ++itr)
{
    // code
}

变量itr在循环外没有生命周期。要使用等效的while - 循环,需要使用范围包装的大括号:

{
    auto itr = list.begin()
    while (itr != list.end())
    {
        // code
        ++itr;
    }
}

最后,正如其他人所建议的那样,也许一个远程循环结构可能更适合您的需求。如果有兴趣,您可以阅读更多相关信息here