|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.08.2011, 08:03 | #1 |
Пользователь
Регистрация: 05.10.2010
Сообщений: 46
|
Алгоритмы STL и std::
День добрый! Чего-то я не пойму, почему при использовании алгоритма для контейнера из STL можно не указывать пространство имён std, а при работе например, с простым массивом, std:: обязательно? Допустим, на примере сортировки:
Код:
Спасибо. |
09.08.2011, 09:20 | #2 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,759
|
Цитата:
|
|
09.08.2011, 09:36 | #3 |
Форумчанин
Регистрация: 01.02.2007
Сообщений: 785
|
Могу предположить следующее - в первом случае параметры переданные функции sort - содержали итераторы вектора, который уже был объявлен выше как std::vector < type > vec
Почему я делаю такое предположение. Вот есть такой код: Код:
1) Если закомментировать строку, где объявили вектор, то на строке с функцией sort компилятор выдаст ошибку: ‘sort’ was not declared in this scope Как я понимаю - компилятор опирается на типы параметров, чтобы понять, что функция в пространстве std ( если раскомментировать строку с объявлением вектора ). 2) Если же после комментирования поправить вызов функции sort так std::sort( ‘ivec’ was not declared in this scope ); , то компилятор выдаст ошибку no matching function for call to ‘sort()’ А тут компилятор знает, что функция из пространства std, но не знает с какими параметрами ее вызывать.
Изо всей благодати
В руках крепко сжатых Я донесу только капли |
09.08.2011, 10:18 | #4 | |
Пользователь
Регистрация: 05.10.2010
Сообщений: 46
|
Цитата:
Код:
|
|
09.08.2011, 10:24 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
только лучше не надейтесь всетаки на такое поведение компиля
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
09.08.2011, 16:18 | #6 |
Форумчанин
Регистрация: 01.02.2007
Сообщений: 785
|
2 rommster Ничего странного нет в этом, это относится к теме перегрузки функций, как было сказано выше.
И лучше все прописывать четко в коде - какая функция чему принадлежит.
Изо всей благодати
В руках крепко сжатых Я донесу только капли |
09.08.2011, 17:21 | #7 | |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Цитата:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
E2015 Ambiguity between 'std::log(double)' and 'std::log(long double)' | Namolem | Помощь студентам | 3 | 02.04.2011 20:22 |
STL в QT конфликтует с STL в Borland | nvrrus | C++ Builder | 0 | 31.03.2011 10:51 |
Задача из раздела Комбинаторные алгоритмы и алгоритмы на гра-фах в Паскале | Klik_1602 | Помощь студентам | 1 | 04.01.2011 01:18 |
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> | Critter | Общие вопросы C/C++ | 5 | 08.08.2010 23:38 |
std | Викдон | Общие вопросы C/C++ | 3 | 17.02.2009 11:33 |