Заблокирован
|
|
1 | |
Реализация алгоритма find_firdt_not_of через другие алгоритмы31.07.2011, 18:44. Показов 4442. Ответов 55
Метки нет (Все метки)
Хотел создать эту тему в разделе С/С++ для экспертов, но мне было отказано в виду отсутствия неких прав. Поэтому формулирую тему здесь.
Есть стандартный алгоритм std::find_first_of. Но нет стандартного алгоритма std::find_first_not_of. Надо предполагать, что авторы стандарта его не включили по тем соображениям, что его легко реализовать с помощью других алгоритмов. Поэтому меня интересует, как реализовать данный алгоритм с помощью других алгоритмов? Есть какие-нибудь соображения? Или же на самом деле все сводится к тому, что надо писать собственную оригинальную реализацию этого алгоритма.
0
|
31.07.2011, 18:44 | |
Ответы с готовыми решениями:
55
Алгоритмы поиска. Подскажите, в чем суть алгоритма? Для одномерного массива составить блок схему алгоритма - Алгоритмы Циклические алгоритмы. Реализация рядов Реализация наложений изображений, масок на другие изображения. |
Заблокирован
|
|
31.07.2011, 20:33 [ТС] | 21 |
Это верно, если a и b одного типа! А что делать, если у вас, как в моем примере, происходит сравнение разных типов. Например, у вас есть база данных сотрудников, и ваш класс позволяет лишь отвечать на вопрос: данный сотрудник имеет заданный номенклатурный номер или нет. То есть нет коммутативности. И как я уже сказал, а что делать с предикатами?! Ведь для предикатов, которые задаются пользователями, совершенно не обязательно, что pred( a, b ) == pred( b, a )
0
|
Kastaneda
|
31.07.2011, 20:36
#22
|
Не по теме: Мне вот просто интересно, как так получилось, что человек работает с STL, а свою реализацию простого алгоритма написать не может?
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
31.07.2011, 20:36 | 23 | |||||
Монстрик на основе кода easybudda. Конечно, проблема сохранилась и здесь, но функтор можно переписать через цикл и поставить v с нужной стороны (слева). Но согласен, что не всё в порядке в королевстве датском
0
|
diagon
|
31.07.2011, 20:37
#24
|
0
|
Kastaneda
|
31.07.2011, 20:40
#25
|
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
31.07.2011, 20:41 | 26 |
А интересно, find_first_of даёт какие-либо гарантии по поводу того, что версия без предиката вызовет == с правильной расстановкой аргументов?
0
|
Заблокирован
|
|
31.07.2011, 20:42 | 27 |
тут всё просто - убери explicit, зачем он нужен в подобном классе? сам себе геморой создаёшь
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
||||||
31.07.2011, 20:46 | 28 | |||||
Сыроежка, а не вариант в класс добавить
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
31.07.2011, 20:51 | 29 | |||||
easybudda, как друга?
Добавлено через 1 минуту по-моему лучше вне класса объявить такую:
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
31.07.2011, 20:52 | 30 |
1
|
31.07.2011, 20:53 | 31 | |||||
Может добавить operator int(){return x;} ?
Добавлено через 53 секунды
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
31.07.2011, 21:14 | 32 | |||||
alex_x_x, спасибо. Сегодня ломает в стандарт лезть
Добавлено через 20 минут Функтор-предикат с сохранением порядка аргументов к предыдущему моему коду.
0
|
31.07.2011, 21:55 | 33 | |||||
так?
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
31.07.2011, 22:06 | 34 |
Что-то я не понял, зачем тогда вообще так изгаляться? Должна быть функция-член класса, которая принимает фамилию и возвращает true/false в зависимости от наличия такого в базе, и функция-член класса, которая по переданной фамилии возвращает номер, или вызывает исключение... Ну и функция, которая по заданному номеру возвращает фамилию, или опять же исключение вызывает... Вы бы толком написали, что Вам нужно. Есть мнение, что просто не в ту сторону роете...
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
31.07.2011, 22:42 | 35 | |||||
Между прочим в C++0x есть алгоритм none_of, действие которого похоже на мой предикат NotIn
Добавлено через 20 минут Ну и для полноты картины реализация через него.
0
|
Заблокирован
|
|
02.08.2011, 03:22 [ТС] | 36 |
У меня к вам встречный вопрос: как так получилось, что вы, не способный понять простой постановки вопроса, считаете себя программистом?!
Спецмально для вас разъясняю: меня не интересует собственная реализация этого алгоритма. Меня интересует, можно ли этот алгоритм выразить через другие стандартные алгоритмы. Вопрос стоит так:почему этот алгоритм не включен в стандартную библиотеку С++?! Какие на это были основания?! Ведь этот алгоритм ни чем не проще и не сложнее других подобных алгоритмов. Почему для калсса std::basic_string он представлен как самостоятельный алгоритм, а для других контейнеров он отсуствует? Если предполагается, что его легко вывести из других алгоритмов, то почему для класса std::basic_string он написан отдельно, а не выведен из других алгоритмов? Вы сами-то можете сказать достоверно, почему разработчики стандарта обошли стороной этот алгоритм? Вы что-то там пытаетесь подправить мой класс Int, и до вас не доходит, а что делать, если условие поиска задано предикатом, как, например, std::less? Как в этом случае быть с перестановкой операндов для предиката?! У меня была лишь одна идея, почему этот алгоритм не включили в стандартную библиотеку С++: его легко реализовать с помощью других алгоритмов. Но оказывается, это не так! То есть никаких веских причин, почему этот алгоритм отсуствует, я не вижу. С таким же успехом можно было бы исключить и другие алгоритмы поиска, как, например, алгоритм std::find, потому что он нисколько не сложнее данного алгоритма.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
02.08.2011, 03:43 | 37 |
Алгоритм find, в отличие от find_first_not_of, требуется довольно часто. Видимо алгоритм find_first_not_of кроме как для строк некому особо нужен не был, а Сыроежка не являлся членом комиссии по стандартизации. Или есть сведения, что было предложение включить этот алгоритм в стандарт, но оно было отклонено? Стандартная библиотека не может объять необъятное.
Кстати, если верить Джосаттису, даже алгоритм find_first_of не входил в исходную версию STL, чего не скажешь про find.
0
|
Заблокирован
|
|||||||||||
02.08.2011, 03:46 [ТС] | 38 | ||||||||||
Возвращаясь к вашему решению, к которому я уже сделал замечание, что в нем происходит перестановка операндов в операции сравнения при вызове алгоритма std::find, хотел бы заметить что этот недостаток легко исправит, заменив
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
02.08.2011, 03:50 | 39 |
Ну уж нет. У equal_to оба параметра имеют одинаковый тип. А кто-то тут говорил о сравнении вообще разнотипных объектов.
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
02.08.2011, 04:02 | 40 |
Это, конечно, хорошо, что есть, кому мне замечания делать. Проблема в другом. С алгоритмом всё в порядке и никакие костыли ему не нужны. Просто не пытайтесь круглое с красным сравнивать. Ещё раз говорю - проверьте логику своей программы - 99.9 % проще всё можно сделать.
0
|
02.08.2011, 04:02 | |
02.08.2011, 04:02 | |
Помогаю со студенческими работами здесь
40
Реализация алгоритма Реализация алгоритма МТ Реализация алгоритма Реализация алгоритма Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |