数据加载中……

进一步分析vector的删除

项目开发中用到了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在删除一个元素的时候,我猜测是把后一个元素的值,赋给了删除的。如果赋值操作符中没有处理得当,那么就会出现令人摸不着头脑的问题。

posted on 2009-12-10 17:41 Stone xin 阅读(1470) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理