Странная ошибка, установите <int>:: begin (), всегда возвращая константный итератор - PullRequest
5 голосов
/ 31 октября 2010

Почему set.begin () всегда возвращает константный итератор, а не стандартный?

35 int test(){
36     std::set<int> myset;
37     myset.insert(2);
38     myset.insert(3);
39     int &res = *myset.begin();
40     return res;
41 }


test.cpp:39: error: invalid initialization of reference of type ‘int&’ from expression of type ‘const int’

1 Ответ

15 голосов
/ 31 октября 2010

Он не возвращает const_iterator, а тип ключа std::set<int> равен const int.

Помните, что ключи в std::set являются постоянными.Вы не можете изменить ключ после того, как он вставлен в набор.Поэтому при разыменовании итератора он обязательно возвращает ссылку constant .Так что вам нужно сказать:

const int &res = *myset.begin();
...