stl map容器中指针的释放
struct MyStruct{ int i; char c; MyStruct(int i, char c) { this->i = i; this->c = c; }};
·
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;
}
{
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条内容
所有评论(0)