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

时间:2015-04-10 03:01:18

标签: c++ list tree iterator const

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

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

正如你所看到的,我有一个类“Element”,它有一个元素指针列表“_children”。

我正在尝试访问这些孩子,以便我可以将孩子添加到他们等等......

但是,我无法使用当前使用“const_iterator”的方法修改这些值,我这样做的原因是_children的“begin()”方法返回一个const_iterator。

有人帮忙吗?谢谢:))

更新:非常感谢你...事实证明,我错误地有一个方法返回_children数据成员的const引用。

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

我刚刚删除了const,它现在完美无缺。谢谢! :d

2 个答案:

答案 0 :(得分:0)

如果列表是const,则begin函数将返回const_iterator。因此,对于_children列表,您应该能够获得标准迭代器,以便对其执行非const操作:

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

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

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

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

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

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

但是需要查看更多代码以确认您是否正在执行此操作。

答案 1 :(得分:-1)

如果你想将_children用作数组,那么如何尝试使用std :: vector类而不是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;
}