Блог пользователя BekzhanKassenov

Автор BekzhanKassenov, 12 лет назад, По-русски

Здравствуй, Сообщество Codeforces! Я довольно-таки часто сталкиваюсь с проблемой: ловлю СЕ, когда на компе все нормально. Этот СЕ связан с СТЛ, а точнее с algorithm. Я не знаю как, но когда я подключаю string или vector некоторые функции (sort, reverse) включаются автоматически. Использую я Far + mingw. Ну естественно, без алгоритма у меня все компилится, я отправляю, а на сервере — СЕ. То есть потеря времени. Кто знает как решить эту проблему (м.б. какие-нибудь параметря компилятору надо передавать?). Я начал использовать заготовки, куда все инклудил, но иногда кажется проще без них. Заранее благодарен всем, кто ответит.

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

»
12 лет назад, # |
Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

#include <algorithm> Мне кажется, или это самое простое решение?

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится -6 Проголосовать: не нравится

    кажется

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      Почему?

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится -8 Проголосовать: не нравится

        ну во-первых это как-то грубо, что ли, иногда он не нужен, зачем его подключать, да и к тому же, кроме algorithm могут с какой-то другой библиотекой проблемы возникнуть, например, я знаю, что такой же прикол с cstdio, без нее scanf/printf норм локально работают

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Там ровно та же проблема, что и с algorithm. Старая версия g++ подключает его через что-то еще, а новая нет.

          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            ну я о чем и говорю, что algorithm подключишь, все проблемы с библиотеками не решишь, когда-нибудь нарвешься еще на что-нибудь, логичнее уж компилятор более новый скачать

»
12 лет назад, # |
Rev. 3   Проголосовать: нравится +8 Проголосовать: не нравится

Для каждого заголовочного файла определено стандартом, какие вещи в него входят. Где что объявлено/определено, можно посмотреть, например, здесь: http://cplusplus.com/ или http://cppreference.com/ Возможно, что некоторые файлы в некоторых реализациях стандартной библиотеки включают, кроме обязательного списка, что-то ещё, однако это не означает, что так будет всегда и везде, и на это нельзя полагаться.

Общее правило такое: для каждой использованной функции или класса надо явно включать тот файл, где они объявлены. Поэтому надо либо запомнить, какие файлы включать для каждой функции/класса, либо сделать шаблон, который включает все стандартные файлы, которые могут потребоваться.

sort() и reverse() по стандарту определены в <algorithm>, а не в <string>, поэтому и для их использования надо включать <algorithm>, а не <string>.

  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

    Для каждого заголовочного файла определено стандартом, какие вещи в него входят.

    По-моему стандартом это не определяется. Если ошибаюсь, можно ссылку на соответсвующий пункт оттуда?

»
12 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Ещё можно для простоты поставить себе ту же версию MinGW, что и на сервере.

Тут написано, что на настоящий момент это GCC 4.6.1.

Его можно найти, например, здесь.

»
12 лет назад, # |
Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

Большое спасибо за помощь. Про сайты где что объявлено я знал. Прост иногда с спешке включить можно и забыть. А вот насчет версии GCC — походу надо будет его обновить. Вопрос — а где можно узнать его версию?

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
g++ -Wall -Werror -pedantic file.cpp
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Ух ты. А что такое -pedantic?

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Ну как же, http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-pedantic-253

      IMO, -pedantic в олимпиадном программировании не очень помогает (разве что если на сервере совсем другой компилятор), не говоря уже о -Werror, который скорее мешает. Из параметров GCC гораздо полезнее -Wextra.

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Ну -Wall -Wextra -Werror у меня стоит всегда. Но -pedantic это уже совсем жесть. Он на long long ругается, потому что его в каком-то старом стандарте нет. Как тогда получается правильно писать?

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          Добавить либо -Wno-long-long, либо -std=c++0x/-std=c++11.

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          -pedantic почти не использую, на случай если на сервере стоит какая-нибудь совсем шаманская версия компилятора

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

делай #include <queue> оно подключает algorithm и vector
у меня товарищ о колическве инклудов заморачивался и подобрал методом научного тыка (и изучением хидеров) некоторое множество которого достаточно для всех компилеров и его стандартных штучек, там точно присутствовал queue
я же это проблемой не считаю и всегда включаю 100500 хидеров set/map/list/stack/queue/algorithm и т.д и т.п., хотя list например использовал всего пару раз за всю жизнь.

»
12 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Проблема исправлена: скачал новый компилятор. Оказывается со старым компилятором были подобные вещи, но я их не замечал. Например: freopen, насколько я знаю, определен в cstdio, и со старым компилятором, проблем не было, когда я подключал только iostream. Теперь же новый начал ругаться, что freopen, stdin не определены)))