我有两个类,第一个包含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;
}
答案 0 :(得分:10)
你在调用代码中制作了一个向量副本,并且迭代器无效,因为它仍然指向原始向量。
你可能想要这样的东西:
const std::vector<mytype> & vector = MyClassA->getvector(it);
答案 1 :(得分:1)
由于您返回std::vector<mytype> _const_&
,其迭代器的类型为std::vector::const_iterator
。
编辑:
啊,是的,我错了, Mark Ransom 是对的。我在这里留下这个答案是因为评论中的讨论本身可能对其他人有用。