std :: vector iterator不兼容

Xav*_* V. 1 c++ iterator vector

我在C++程序中执行时遇到错误(矢量迭代器不兼容)我不明白.[(Windows/Visual C++ 2008 Express)]

这是我的问题的简化版本:

#include <vector>

class A
{
    int mySuperInt;
public:
    A(int val) : mySuperInt(val) {}
};
class B
{
    std::vector<A*> myAs;
    public:
        B() 
        {
            myAs.push_back(new A(1));
        };
        const std::vector<A*> getA() const {return myAs;}
};

int main()
{
    std::vector<B>* myBs = new std::vector<B>;

    myBs->push_back(B());

    std::vector<B>::const_iterator it_B = myBs->begin();
    for ( ; it_B != myBs->end(); ++it_B)
    {
        std::vector<A*>::const_iterator it_A = it_B->getA().begin();
        for ( ; it_A != it_B->getA().end(); ++it_A) // <-- Error during execution: vector iterator incompatibles
        {
            // Do stuff
            // ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

提前感谢您的回答.

Jos*_*shD 6

您的getA()函数按值返回向量.您正在将循环迭代器初始化为该向量的开头,但由于返回的向量是临时的,因此它会在该行的末尾被销毁.

// at the end of this line the vector returned by getA is gone, so it_A is invalid.
std::vector<A*>::const_iterator it_A = it_B->getA().begin();
Run Code Online (Sandbox Code Playgroud)

因此迭代器不再有效.你应该像这样返回对向量的引用(注意&):

const std::vector<A*> & getA() const {return myAs;}
Run Code Online (Sandbox Code Playgroud)