MyException - 我的异常网
当前位置:我的异常网» C++ » 考一个和STL相关的小疑点

考一个和STL相关的小疑点

www.MyException.Cn  网友分享于:2013-02-18  浏览:5次
考一个和STL相关的小问题
#include "stdafx.h"
#include <iostream>
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>


using namespace  std;

class MyInt
{
public:
MyInt(int a)
{
_value = a;
}

int _value;
};


void Print(vector<MyInt*>& v)
{
for(int i=0; i<v.size(); ++i)
{
cout << v[i]->_value << " ";
}
cout << endl;
}

//删除所有小于5的item, 注意释放内存
//怎么实现?
void MyRemove(vector<MyInt*>& v)
{

}

int main() 
{
vector<MyInt*> v;

for(int i=0; i<10; ++i)
{
v.push_back(new MyInt(i));
                v.push_back(new MyInt(10-i))
}

Print(v);

MyRemove(v);

Print(v);

system("pause");

return 0;
}


我们要删除所有小于5的Item, MyRemove函数该怎么实现?
STL

------解决方案--------------------
手边没有编译器,仅供楼主参考:
void MyRemove(std::vector<MyInt*>& v)
{
std::vector<MyInt*>::const_iterator next_element,begin_del,end_del;
next_element = v.begin();
while(next_element != v.end())
{
if(next_element->_value<5)
{
delet *next_element;
next_element = v.erease(next_element);
}
else
++next_element;
}
}

------解决方案--------------------
你不能用 vector<MyInt> 么?为什么非要用指针的 vector<MyInt*>?

如果你非要用指针的,可以参考一下:


void MyRemove(vector<MyInt*> &v)
{
    for (vector<MyInt*>::iterator it = v.begin(); it != v.end(); )
    {
        MyInt *p = *it;
        if (p->_value < 5)
        {
             delete p;
             it = v.erase(it);
        }
        else
        {
            ++it;
        }
    }
}

------解决方案--------------------
考一个?老师你好 
------解决方案--------------------

auto itr = std::remove_if( v.begin(), v.end(), []( MyInt * p )->bool
{
if( p->_value < 5 )
{
delete p;
return true;
}
else
return false;
}
                      );

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有