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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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