c++中对列表的迭代器

Iterator over a list of pairs in C++?

本文关键字:迭代器 列表 c++      更新时间:2023-10-16

我定义了一个pair列表,并希望使用迭代器访问它们,示例如下。

class A{
private:
    list<pair<size_type,size_type> > l_edge_;   
public: 
void function() const{  
    list<pair<size_type,size_type> >::iterator Iter_;
    Iter_ = l_edge_.begin();
}
}
然而,我得到了一个编译错误。我该怎么修理它?
error: no match for 'operator=' (operand types are 'const iterator 
{aka const std::_List_iterator<std::pair<unsigned int, unsigned int> >}' and
          'std::list<std::pair<unsigned int, unsigned int> >::const_iterator 
{aka std::_List_const_iterator<std::pair<unsigned int, unsigned int> >}')

我猜你是想写一个const成员函数,而不是你在问题中复制的:

void function() const
{
    Iter_ = l_edge_.begin();
}

现在,由于函数是const, l_edge_成员也是const,因此,begin()返回const_iterator而不是普通的iterator。但这没什么关系,因为Iter_成员也是const,所以不能赋值给。

通常不希望将迭代器声明为成员变量,除非有非常特殊的需要。相反,只需在需要的时候声明一个本地的,并且具有适当的属性:
class A
{
private:
    list<pair<size_type,size_type> > l_edge_;
public: 
    //const member function
    void function() const
    {
        list< pair<size_type,size_type> >::const_iterator iter = l_edge_.begin();
    }
    //non-const member function
    void function()
    {
        list< pair<size_type,size_type> >::iterator iter = l_edge_.begin();
    }
};