Проблема с методами begin и end

214
23 августа 2017, 18:07
#include <iostream>
#include <set>
#include <iterator>
using namespace std;
struct keker{
   int a;
   int b;
};

int main(int argc, char const *argv[]) {
   set<keker> rofl;
   keker k1,k2,k3,k4;
   k1.a = 1;
   k2.a = 2;
   k3.a = 3;
   k4.a = 4;
   rofl.insert(k1);
   rofl.insert(k2);
   rofl.insert(k3);
   rofl.insert(k4);
   cout<< rofl.begin()->a<<endl;
   cout<< rofl.end()->a<<endl;
   return 0;
}

После компиляции выводит: 1 1

Хотя должен выводить: 1 4

Помогите, пожалуйста, уже весь день маюсь с этим

Answer 1

Вот тут

 rofl.end()->a

он вообще может делать что хочет: разыменовывать итератор, возвращаемый end(), нельзя!

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

Все, для чего он пригоден - это для сравнения с ним значения другого итератора - типа, проход по контейнеру завершен или там элемент не найден.

Но не для разыменования!

READ ALSO
spawnl, shellexecute запуск приложения с атрибутами

spawnl, shellexecute запуск приложения с атрибутами

Есть программа с атрибутамиАтрибуты: 1) запускается программа, 2) подхватывается предварительно созданный файл и 3)параметры для него

287
Задача из Primer Plus C++

Задача из Primer Plus C++

Здравствуйте, не получается решить задачу

289
Можно ли создать класс-обертку за слежением за окном windows?

Можно ли создать класс-обертку за слежением за окном windows?

В общем мне надо создать класс-обертку, для слежения за положением любого окна (ну допустим по его HWND) в WindowsЯ знаю в Qt есть класс QWindow, но там...

209
BSoD на Win7 во время работы приложения

BSoD на Win7 во время работы приложения

Есть клиент на C++, который на win 7 иногда, не систематично, вызывает синий экран смертиПри этом пользователи восьмёрок и десяток с такой проблемой...

218