![](/img/trans.png)
[英]Error “vector iterators incompatible” when concatenating two STL vectors
[英]vector iterators incompatible when deep copying vectors
我遇到了这个“向量迭代器不兼容”的断言,我也不知道为什么。 我在这里看了几个答案,但没有一个有帮助。 我想知道是否有人可以发现问题。 从本质上讲,它是我要深复制的向量,但是当我遍历副本时,它会断言。 代码有点混乱,但是我无法用更简单的情况重新编程:
#include <vector>
class MyClass
{
public:
MyClass() {};
~MyClass() {};
virtual MyClass* Clone()
{
MyClass* clone = new MyClass(*this);
return clone;
}
int GetData() const { return m_data; }
private:
int m_data;
};
typedef std::vector<MyClass*> MyClassList;
struct MyStruct
{
MyClassList myClassList;
};
struct MyStruct2
{
MyStruct2() {};
MyStruct *pData2;
};
int _tmain(int argc, _TCHAR* argv[])
{
MyClassList* m_pMyClasssOrig;
m_pMyClasssOrig = new MyClassList();
m_pMyClasssOrig->push_back(new MyClass());
m_pMyClasssOrig->push_back(new MyClass());
m_pMyClasssOrig->push_back(new MyClass());
// Setup worker parameters
MyStruct2* pWorkerParam = new MyStruct2();
MyStruct* pData2 = new MyStruct();
memset(pWorkerParam, 0x00, sizeof(MyStruct2));
memset(pData2, 0x00, sizeof(MyStruct));
pWorkerParam->pData2 = pData2;
// Make deep copy of the myClassList
for (auto pMyClass : *m_pMyClasssOrig)
{
auto decoderCopy = pMyClass->Clone();
pWorkerParam->pData2->myClassList.push_back(decoderCopy);
}
// why do I get "Expression: vector iterators incompatible"
// here?
for (auto i = pWorkerParam->pData2->myClassList.begin(); i != pWorkerParam->pData2->myClassList.end(); i++)
{
MyClass* pMyClass = *i;
(void)pMyClass->GetData();
}
return 0;
}
不要在std::vector
上使用memset
。
您不知道std::vector
的内部是什么,因此您不应该将它们归零。 如果需要清除向量,请使用clear
方法。
即使对于仅包含指针的类,也不要使用memset,而是使构造函数将指针设置为NULL。
我的猜测是memset
在内部向量状态上踩踏。 尝试删除它,看看是否通过。 我遇到了这个确切的问题。 看到这个问题 。 接受的答案说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.