从函数返回向量

时间:2011-06-23 14:40:21

标签: c++ vector iterator

我有两个类,第一个包含vector和一个像这样的get方法:

std::vector<mytype> const& MyClassA::getvector(std::vector<mytype>::iterator &it)
{
    it = this->myiterator;

    return this->myvector;
}

std::vector<mytype> myvector;
std::vector<mytype>::iterator myiterator;

我还有另一个课我应该使用矢量:

MyClassB::myfunction()
{
    std::vector<mytype>::iterator it;
    std::vector<mytype> vector = MyClassA->getvector(it);

    if (it > vector.begin())
    {
        ....
        (--it)->dosomestuff();
        ....
    }
}

如果我得到运行时异常:迭代器不兼容。为什么呢?

编辑1

void MyClassA::setvector(mytype myelement)
{
    this->myvector.push_back(myelement);
    this->myiterator = this->myvector.end() - 1;
}

2 个答案:

答案 0 :(得分:10)

你在调用代码中制作了一个向量副本,并且迭代器无效,因为它仍然指向原始向量。

你可能想要这样的东西:

const std::vector<mytype> & vector = MyClassA->getvector(it);

答案 1 :(得分:1)

由于您返回std::vector<mytype> _const_&,其迭代器的类型为std::vector::const_iterator

编辑:

啊,是的,我错了, Mark Ransom 是对的。我在这里留下这个答案是因为评论中的讨论本身可能对其他人有用。