項目開發中用到了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在刪除一個元素的時候,我猜測是把后一個元素的值,賦給了刪除的。如果賦值操作符中沒有處理得當,那么就會出現令人摸不著頭腦的問題。