stl map容器中指针的释放

本文演示了如何使用C++ STL中的map容器存储自定义结构体的指针,并展示了插入、查找、修改、删除等基本操作。同时,还介绍了如何避免内存泄漏。
struct MyStruct
{
    int i;
    char c;

    MyStruct(int i, char c)
    {
        this->i = i;
        this->c = c;
    }
};

int stl_ptr_test()
{
    MyStruct* pst1 = new MyStruct(1, 'a');
    MyStruct* pst2 = new MyStruct(1, 'a');
    MyStruct* pst3 = new MyStruct(3, 'c');

    map<int, MyStruct*> map1; // 其中的value为指针型的

    map1.insert(pair<int, MyStruct*>(10, pst1));
    map1.insert(pair<int, MyStruct*>(11, pst2));
    map1.insert(pair<int, MyStruct*>(12, pst3));

    map<int, MyStruct*>::iterator iter = map1.find(11);
    cout << iter->second->i << ' ' << iter->second->c << endl;

    MyStruct* pst = iter->second;
    pst->c = 'b';

    iter = map1.find(11);
    cout << iter->second->i << ' ' << iter->second->c << endl;

    iter = map1.find(10);
    delete iter->second; // 释放指针
    map1.erase(10); // 从map中删除元素

    iter = map1.find(10);
    if (iter == map1.end())
    {
        cout << "not found" << endl;
    }
    else
    {
        cout << "found: " << iter->second->i << ' ' << iter->second->c << endl;
    }

    for (iter = map1.begin(); iter != map1.end();)
    {
        cout << iter->second->i << " " << iter->second->c << endl;

        delete iter->second; // 释放指针
        map1.erase(iter++); // 从map中删除元素,注意iter++的写法
    }

    map1.clear();

    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值