迭代器在指向整数时自动解除引用

LBa*_*ish 1 c++ iterator c++14

我注意到,当else if在此代码中执行语句时destination,尽管没有被解除引用,但似乎被解释为它指向的实际值而不是迭代器.就像它被自动解除引用一样.该for循环执行你所期望的,但我还想done设置为truebegin()end()迭代器都是平等的.destinations是一个整数的双端队列,是这个函数的全局.

void removeDestination(int destinationFloor)
{
    bool done = false;
    while(!done && !destinations.empty())
    {
        for (auto destination = destinations.begin(); destination != destinations.end(); ++destination)
        {
            if(*destination == destinationFloor)
            {
                destinations.erase(destination);
                break;
            }
            else if(destination == destinations.end())
            {
                done = true;
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

use*_*ica 5

这个问题与destination虚假解除引用无关.该else if分支从来没有采取:

else if(destination == destinations.end())
Run Code Online (Sandbox Code Playgroud)

因为如果destination到达结尾destinations,那么循环条件:

for (auto destination = destinations.begin(); destination != destinations.end(); ++destination)
//                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

else if在输入之前停止循环.