Как напечатать последний элемент набора в C ++ - PullRequest
1 голос
/ 25 мая 2020

Я пытаюсь напечатать последний элемент набора set<int>s;, где фактический последний элемент равен 9.

set<int>:: iterator it=s.begin();
while(it!=s.end())
{
    cout<<*it<<endl;
    it++;
}

когда я использую этот l oop, через этот набор он показывает этот последний элемент - это 9, что правильно.

но когда используется этот фрагмент кода, он показывает, что последний элемент равен 4, что неверно.

int setint= *s.end();
cout<<setint<<endl;

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

int setint= *s.begin();
    cout<<setint<<endl;

как мне это сделать?

Ответы [ 2 ]

5 голосов
/ 25 мая 2020

end() очков за конец коллекции. Его никогда не следует разыменовывать.

Вместо этого можно использовать rbegin():

if (!myset.empty()) {
    cout << *myset.rbegin() << endl;
}
2 голосов
/ 25 мая 2020

end на самом деле «указывает» на элемент за пределами содержимого набора:

enter image description here

, и вместо этого вы должны использовать обратный итератор:

https://en.cppreference.com/w/cpp/container/set/rbegin

if (!mySet.empty())
{
    std::cout << "Last element is: " << *mySet.rbegin() << std::endl; 
}
...