В чем проблема с использованием итератора здесь - PullRequest
0 голосов
/ 13 октября 2019

Я только что начал с 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;

Ответы [ 3 ]

1 голос
/ 13 октября 2019

Если вы создали итератор Константа , вы не можете изменить его значение. Лучше изменить тип переменной на простую переменную или создать любую новую переменную, которую вы хотите иметь. Это может помочь вам https://www.geeksforgeeks.org/how-to-modify-a-const-variable-in-c/

1 голос
/ 13 октября 2019

set Итератор является константой, его нельзя изменить.

Итераторы типов элементов и const_iterator могут быть псевдонимами одного и того же типа. Это означает, что определение пары перегрузок функций с использованием двух типов, так как типы параметров могут нарушать правило единого определения. Поскольку итератор может быть преобразован в const_iterator, вместо него будет работать одна функция с const_iterator в качестве типа параметра.

Элементы также являются постоянными, и вы не сможете их изменить в любом случае.

Решение для вашегопроблема заключается в удалении элемента, который вы хотите изменить, и вставке нового элемента, который вы хотите иметь.

0 голосов
/ 14 октября 2019

@ У Обливиона есть ответ, но я бы сказал, немного по-другому.

A set - упорядоченная коллекция элементов. Порядок поддерживается set. Если бы вы могли изменить элементы set (через итератор), то вы бы нарушили порядок расположения элементов в наборе, поэтому итераторы, предоставляемые этим набором, предоставляют вам доступ только для чтения к элементам в коллекции.

Если вы хотите «изменить» значение записи в наборе, вы можете стереть старую и вставить новую (предположительно другую).

...