Алгоритм find() является обобщенным. Это значит, что его можно приме- “1 нять к разным типам данных. Фактически его обобщенная природа носит двойственный характер.
• Алгоритм find() можно применять к любой последовательности в стиле библиотеки STL.
• Алгоритм find() можно применять к любому типу элементов.
Также возможно вы думаете, что такая тема как http://ptkpodshipnik.ru/o-podshipnikah/podshipniki-skolzheniya/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт ptkpodshipnik.ru - там можно узнать много интересного про то, где выбрать подшипники скольжения из множества, и сколько стоит подшипник скольжения.
Что означает вообще подшипники скольжения, где находятся подшипники скольжения - про это написано на сайте про подшипники скольжения.
Это важная для многих тема - подшипники скольжения Спасибо сайту ptkpodshipnik.ru за информацию про подшипники скольжения
Рассмотрим несколько примеров (если они покажутся вам сложными, посмотрите на диаграммы.
void f(vector& v, int x) // работает с целочисленными векторами {
vector::iterator p = find(v.begin(),v.end(),x); if (p!=v.end()) { /* мы нашли x */ }
// . . .
}
Здесь операции над итераторами, использованные в алгоритме find(), явля- “1 ются операциями над итераторами типа vector::iterator; т.е. оператор ++ (в выражении ++first) просто перемещает указатель на следующую ячейку памяти (где хранится следующий элемент вектора), а операция * (в выражении *first) разыменовывает этот указатель. Сравнение итераторов (в выражении first!=last) сводится к сравнению указателей, а сравнение значений (в выражении *first!=val ) — к обычному сравнению целых чисел.
Попробуем применить алгоритм к объекту класса list.
void f(list& v, string x) // работает со списком строк {
list::iterator p = find(v.begin(),v.end(),x); if (p!=v.end()) { /* мы нашли x */ }
// . . .
}
Здесь операции над итераторами, использованные в алгоритме find(), явля- “1 ются операциями над итераторами класса list::iterator. Эти операторы имеют соответствующий смысл, так что логика их работы совпадает с логикой работы операторов из предыдущего примера (для класса vector). В то же время они реализованы совершенно по-разному; иначе говоря, оператор ++ (в выражении ++first) просто следует за указателем, установленным на следующий узел списка, а оператор * (в выражении *first) находит значение в узле Link. Сравнение итераторов (в выражении first!=last) сводится к сравнению указателей типа Link*, а сравнение значений (в выражении *first!=val) означает сравнение строк с помощью оператора != из класса string.
Итак, алгоритм find() чрезвычайно гибкий: если мы будем соблюдать простые правила работы с итераторами, то сможем использовать алгоритм find() для поиска элементов в любой последовательности любого контейнера. Например, с помощью алгоритма find() мы можем искать символ в объекте класса Document.
void f(Document& v, char x) // работает с объектами класса Document {
Text_iterator p = find(v.begin(),v.end(),x); if (p!=v.end()) { /* мы нашли x */ }
// . . .
}
Эта гибкость является отличительной чертой алгоритмов из библиотеки STL и делает их более полезными, чем многие люди могут себе представить.
Опубликовал katy
April 22 2015 22:21:13 ·
0 Комментариев ·
2996 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.