修改 STL 列表中的元素 - C++

Modifying elements in a STL List - C++

我正在尝试使用 C++ 中的广义列表构建二叉搜索树。

class Element
{
private:
       list<Element*> _children;
       char* _name;
// and other data members/methods...
}

如您所见,我有一个 class "Element" 并且它有一个元素指针列表“_children”。

我正在尝试访问这些 children 以便我可以向它们添加 children 等等...

但是,我不能用我目前使用 "const_iterator" 的方法修改这些值,我这样做的原因是 _children [=33= 的 "begin()" 方法]是一个const_iterator.

有人帮忙吗?谢谢:)

更新:非常感谢大家...事实证明,我错误地使用了一个方法 return _children 数据成员的常量引用。

const list<Element*>& getChildren();// return [_children]

我刚刚删除了 const,它现在可以完美运行了。谢谢! :D

如果您想将 _children 用作数组,试试 std::vector class 而不是 std::list 怎么样?

这是用法。

#include <iostream>
#include <vector>

int main(void) {
    std::vector<int> list;
    list.push_back(1);
    list.push_back(2);
    list.push_back(3);
    for (int i = 0; i < list.capacity();++i){
        std::cout << list[i] << std::endl;
    }
    return 0;
}

如果列表是 const,begin 函数将 return 一个 const_iterator。因此,对于 _children 列表,您应该能够获得标准迭代器以让您对其执行非常量操作:

list<Element*>::iterator it = _children.begin();

但是,如果您传递对列表的 const 引用,然后尝试从中获取非 const 迭代器,这将不起作用。不允许这样的事情:

void doSomething( const list<Element*>& l )
{
    list<Element*>::iterator it = l.begin();
}

您需要将非常量引用传递给列表。

另一种不允许这样做的情况是在 const 函数中,即

void doSomething() const
{
    list<Element*>::iterator it = _children.begin();
}

但需要查看更多代码才能确认您是否这样做。