我刚开始使用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;
答案 0 :(得分:1)
set的迭代器是常量,无法对其进行修改。
成员类型iterator和const_iterator可能是 相同的类型。这意味着使用定义一对函数重载 两种类型的参数类型可能违反“一个定义规则”。 由于迭代器可转换为const_iterator,因此一个函数 改为使用const_iterator作为参数类型。
这些元素是恒定的,您也无法对其进行修改。
解决此问题的方法是删除要修改的元素,然后插入要拥有的新元素。
答案 1 :(得分:1)
如果已将迭代器制成常量,则无法修改其值。最好将变量类型更改为简单变量或创建任何您希望拥有的新变量。 这可能对您有帮助 https://www.geeksforgeeks.org/how-to-modify-a-const-variable-in-c/
答案 2 :(得分:0)
@Oblivion有答案,但我会说略有不同。
set
是元素的有序集合。该顺序由set
维护。如果可以(通过迭代器)更改set
的元素,则将破坏集合中元素的顺序,因此集合提供的迭代器仅使您可以读取集合中的元素
如果您要“更改”集合中某个条目的值,则可以删除旧的条目,然后插入一个新的(可能是不同的)条目。