C++程序STL中list修改
for(i=m_Line.size()-1;i>=0;i--){CTempLinetl;tl.DeviceID=-100;//支路IDif(list[i]==1){m_L...
for(i=m_Line.size()-1;i>=0;i--)
{
CTempLine tl;
tl.DeviceID=-100;//支路ID
if(list[i]==1)
{
m_Line[i]=tl;
}
}
std::vector<CTempLine>::iterator l;
for(l = m_Line.begin(); l != m_Line.end();)
{
if( (*l).DeviceID == -100)
{
l = m_Line.erase(l);
}
else
{
++ l;
}
}
delete[] list;
该代码是根据list[i]来删除不需要支路。这段代码写得不好,先将list[i]=1的对应支路的DeviceID设置一个一般不可能用到的值,然后遍历m_Line,若其DeviceID是刚才设置的值则删除。之所以要这样绕一个弯,是因为erase()后m_Line和list的后续下标就无法对应了,我想用一种更为简单点的方法来删除list[i]=1的支路,请问如何来修改这段程序? 展开
{
CTempLine tl;
tl.DeviceID=-100;//支路ID
if(list[i]==1)
{
m_Line[i]=tl;
}
}
std::vector<CTempLine>::iterator l;
for(l = m_Line.begin(); l != m_Line.end();)
{
if( (*l).DeviceID == -100)
{
l = m_Line.erase(l);
}
else
{
++ l;
}
}
delete[] list;
该代码是根据list[i]来删除不需要支路。这段代码写得不好,先将list[i]=1的对应支路的DeviceID设置一个一般不可能用到的值,然后遍历m_Line,若其DeviceID是刚才设置的值则删除。之所以要这样绕一个弯,是因为erase()后m_Line和list的后续下标就无法对应了,我想用一种更为简单点的方法来删除list[i]=1的支路,请问如何来修改这段程序? 展开
若以下回答无法解决问题,邀请你更新回答
展开全部
std::vector<CTempLine>::iterator l;
int i = 0;
for( l = m_Line.Begin(); l != m_Line.end(); ++i) // list 始终往后推进
{
if(list[i] == 1)
{
l = m_Line.erase(l); // m_Line删除当前元素,不推进
}
else
{
++l ; // m_Line只有当list[i] != 1时才推进,这样就始终是对应的
}
}
delete[] list;
int i = 0;
for( l = m_Line.Begin(); l != m_Line.end(); ++i) // list 始终往后推进
{
if(list[i] == 1)
{
l = m_Line.erase(l); // m_Line删除当前元素,不推进
}
else
{
++l ; // m_Line只有当list[i] != 1时才推进,这样就始终是对应的
}
}
delete[] list;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道你是想干什么,能说的明白一点么?
更多追问追答
追问
我就是想把这段程序简化下,因为程序在list[i]=1(list[]搜索标示位)的基础上对如果DeviceID是-100(没有这样的DeviceID)进行删除操作,这样相当于绕弯了,是因为erase()后m_Line和list的后续下标就无法对应了,我可不可以直接来删除,而不是在已经有搜索标示位的基础上重新定义DeviceID=-100来进行删除。源程序如上:
追答
是指在list中,如果list[i]=1,那么m_Line[i]就需要删除对吧?
如果是这样的话,可以改写成如下:
for (i = m_Line.size()-1; i >= 0; i--)
{
if (list[i] == 1)
{
m_Line.erase(i);
}
}
delete [] list;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询