我正在尝试使用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
答案 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;
}