项目开发中用到了vector,自己定义了一个数据类型 myType,用vector来保存。
在删除的时候出现了个问题。
#include <vector>
#include <algorithm>
class MyClass
{
public:
MyClass(int v){ m_value=v;}
virtual ~MyClass(){}
MyClass operator=(const MyClass& otherData);
bool operator==(const MyClass& otherData);
int m_value;
}
MyClass::operator =(const MyClass &otherData)
{
return *this;
}
bool MyClass::operator ==(const MyClass &otherData)
{
if (otherData.m_value==this->m_value)
{
return true;
}else
{
return false;
}
}
int main()
{
std::vector<MyClass> myVector;
MyClass v1(1);
MyClass v2(2);
MyClass v3(3);
myVector.push_back(v1);
myVector.push_back(v2);
myVector.push_back(v3);
for( std::vector<MyClass>::iterator result=myVector.begin();
result!=myVector.end();
++result)
{
cout << "Element " << result->m_value << endl;
}
MyClass v(2);
std::vector<MyClass>::iterator it = std::find(myVector.begin(),myVector.end(),v);
if (it!=myVector.end())
{
myVector.erase(it);
}
for( std::vector<MyClass>::iterator result=myVector.begin();
result!=myVector.end();
++result)
{
cout << "After erase MyClass v(2), Element left " << result->m_value << endl;
}
return 0;
}
猜猜看输出结果会是什么?
如果你想当然的认为是
Element 1
Element 2
Element 3
After erase MyClass v(2), Element left 1
After erase MyClass v(2), Element left 3
那就错了!
Element 1
Element 2
Element 3
After erase MyClass v(2), Element left 1
After erase MyClass v(2), Element left 2
这个才是结果。
这当中因为重载了赋值运算符,vector在删除一个元素的时候,我猜测是把后一个元素的值,赋给了删除的。如果赋值操作符中没有处理得当,那么就会出现令人摸不着头脑的问题。