for (vector<RFMSStepFlowButton*>::iterator it = m_unionlist.begin();
it!= m_unionlist.end();it++)
{
int i = 0;//找到两个就退出。
vector<RFMSStepFlowButton*>::iterator it1 = m_buttonlist.begin();
for (;it1!= m_buttonlist.end()&&i<2;  it1++)
{
if (...)
{
m_unionlist.push_back(*it1);
i++;
}
}
}m_buttonlist,m_unionlist是两个vector目的,遍历m_unionlist,从m_buttonlist中找符合条件的项,插入m_unionlist,新插入的项也要参加遍历。我上面的方法报错了,该如何实现?

解决方案 »

  1.   


    vector<RFMSStepFlowButton*>::iterator it1 = m_buttonlist.begin();
    for (vector<RFMSStepFlowButton*>::iterator it = m_unionlist.begin();
            it!= m_unionlist.end();it++)
        {
            int i = 0;//找到两个就退出。
            
            for (;it1!= m_buttonlist.end()&&i<2;  it1++)
            {
                if (...)
                {
                    m_unionlist.push_back(*it1);
                    i++;
                }
            }
        }
    这样就行了
      

  2.   

    it1!= m_buttonlist.end()&&i<2这里&&改成||,  但问题还是存在的。
      

  3.   

    呃,比较麻烦,先将要插入的项放入临时vector里面,然后插入,遍历插入项。
      

  4.   

    这怎么可能,
    这样buttonlist遍历完第一次不就完了?
     unionlist里的每一项都需要遍历buttonlist的啊。这个然后插入,是在什么时候插入?
      

  5.   

    push_back以后迭代器有可能失效。必须重新计算迭代器。
      

  6.   

    这个错是报在it++上面的,
    应该是m_unionlist.push_back(*it1);后,it没有刷新。但怎样能让他刷新呢?
      

  7.   

    似乎是这样,所以我一般是这样用的...
    int vii = 0;
    for (vii = 0; vii < vi.size(); vii++)
    直接取 vi[vii] 出来但是楼主这个如果这样用的话会陷入死循环,发现没.?
      

  8.   

    先不考虑效率:
    for (vector<RFMSStepFlowButton*>::iterator it = m_unionlist.begin();
            it!= m_unionlist.end();it++)
        {
            int i = 0;//找到两个就退出。
            vector<RFMSStepFlowButton*>::iterator it1 = m_buttonlist.begin();
            for (;it1!= m_buttonlist.end()&&i<2;  it1++)
            {
                if (...)
                {
                    m_unionlist.push_back(*it1);
                    it = find(m_unionlist.begin(),m_unionlist.end(),*it1); 
                    i++;
                }
            }
        }
      

  9.   

    OK,解决,谢谢各位,
    办法是结合ttwtt和yshuise的方法。
    代码:
    for (int n = 0; n < m_unionlist.size();n++)
    {
    vector<RFMSStepFlowButton*>::iterator it = m_unionlist.begin();
    it = it+n; int i = 0;//找到的按钮个数,到两个就退出。
    for (vector<RFMSStepFlowButton*>::iterator it1 = m_buttonlist.begin();
    it1!= m_buttonlist.end()&&i<2;it1++)
    {
    if (...)
    {
    m_unionlist.push_back(*it1);
    i++;
    }
    }
    }
      

  10.   

    在 m_unionlist 遍历结束之后push_back会造成迭代器失效。