这里使用迭代器有什么问题

问题描述 投票:0回答:1

我刚开始使用c ++ stl,但是我无法找出错误...非常感谢您的帮助...

int count = 0 ;
while (!s.empty()) 
{
    s.erase(--s.end());
    set<int >::iterator it;
    for (it = s.begin(); it != s.end(); it++) 
    {

        if (*it > 0)
            * it -= r; //*error : expression must be modifiable lvalue
             //r is a constant
        else 
            s.erase(it);
    }
    count++;
}

cout << count;
c++ stl iterator
1个回答
0
投票

set的迭代器是常量,无法对其进行修改。

成员类型的迭代器和const_iterator可能是相同的类型。这意味着使用定义一对函数重载两种类型的参数类型可能违反“一个定义规则”。由于迭代器可转换为const_iterator,因此一个函数使用const_iterator作为参数类型将代替。

元素也是恒定的,您也无法修改它们。

您的问题的解决方案是删除您想要修改的元素,然后插入您想要的新元素。

© www.soinside.com 2019 - 2024. All rights reserved.