【问题标题】:STL, list, iteratorSTL、列表、迭代器
【发布时间】:2010-09-17 21:39:57
【问题描述】:

不好意思买我的英语)))

我有这个问题: 我必须用可能的编辑项目迭代 STL 列表中的项目:删除、添加、编辑。 这是我的方法:

void MoveOnNewPlace(Tree& parent, Tree& child)
{

    Tree *temp=&parent;
    while(temp->GetParent()!=temp && temp->GetItem().GetChar()=='(')
        temp=temp->GetParent();
    if(*temp==parent) return;
    Tree newTr(child);
    newTr.SetParent(*temp);
    temp->GetSubNodes()->push_back(newTr); //(Tree(child,temp));
    parent.GetSubNodes()->remove(child);

}

list<Tree>::_Nodeptr ptr=nodes->_Myhead->_Next;
    unsigned int i=0;
    while(i++<nodes->size() && ptr!=0)
    {
        Prepair(ptr->_Myval);
        if(ptr->_Myval.GetItem().GetChar()=='[')
            MoveOnNewPlace(t,ptr->_Myval);
        ptr=ptr->_Next;
    }

有人可以告诉我如何在不明确使用 _Myhead、_Myhead 等的情况下以其他方式做到这一点。 谢谢!

【问题讨论】:

    标签: list stl iterator


    【解决方案1】:

    您是否考虑过使用list&lt;Tree&gt;::iteratorlist&lt;Tree&gt;::const_iterator

    for (list<Tree>::iterator i = list.begin(); i != list.end(); ++i) {
        ...do stuff with *i...
    }
    

    【讨论】:

    • 如果我使用 list::const_iterator 那么我会得到编译错误,如果我使用 list::iterator 我会得到运行时错误,因为可以删除列表项并导致内存访问冲突。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 2013-09-23
    • 2012-11-05
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多