Обратите внимание на то, что, решив выразить алгоритм поиска наибольшего элемента в терминах указателей, мы “случайно” уже обобщили решение задачи: при желании мы можем найти наибольший элемент массива или вектора, но, помимо этого, можем найти максимальный элемент части массива или вектора. Рассмотрим пример.
// . . .
vector& v = *jill_data; double* middle = &v[0]+v.size()/2;
double* high1 = high(&v[0], middle); // максимум первой
// половины
double* high2 = high(middle, &v[0]+v.size()); // максимум второй
// половины
// . . .
Также вам может показаться, что такая тема как http://ivmiel.ru/ никак не связана и даже не тематичны с программированием.
Возможно, это и так, но все-таки зайдите на сайт ivmiel.ru, чтобы узнать там много интересного про такую тему, как продажа квартир в Иваново. Что такое продажа квартир в Иваново, сколько стоит квартира в Иваново - про это написано на сайте ivmiel.ru. Это важная для многих тема - продажа квартир в иваново. Спасибо за информацию сайту ivmiel.ru
Здесь указатель high1 ссылается на максимальный элемент первой половины вектора, а указатель high2 — на максимальный элемент второй половины. Графически это можно изобразить следующим образом:
v.size()
1..
I
I
В качестве аргументов функции high() мы использовали указатели. Этот механизм управления памятью относится к слишком низкому уровню и уязвим для ошибок. Мы подозреваем, что большинство программистов для поиска максимального элемента в векторе написали бы нечто вроде следующего:
double* find_highest(vector& v)
{
double h = -1; double* high = 0; for (int i=0; i
{
high = &v[i]; h = v[i];
}
return high;
}
Однако это не обеспечивает достаточно гибкости, которую мы “случайно” уже придали функции high(), — мы не можем использовать функцию find_highest() для поиска наибольшего элемента в части вектора. На самом деле, “связавшись с указателями”, мы достигли практической выгоды, получив функцию, которая может работать как с векторами, так и с массивами. Помните: обобщение может привести к функциям, которые позволяют решать больше задач.
Стандартная библиотека языка С++, обеспечивающая основу для работы с данными, представленными в виде последовательности элементов, называется STL. Обычно эту аббревиатуру расшифровывают как “стандартная библиотека шаблонов” (“standard template library”). Библиотека STL является частью стандарта ISO C++. Она содержит контейнеры (такие как классы vector, list и map) и обобщенные алгоритмы (такие как sort, find и accumulate).
Следовательно, мы имеем право говорить, что такие инструменты, как класс vector, являются как частью библиотеки STL, так и стандартной библиотеки. Другие средства стандартной библиотеки, такие как потоки ostream и функции для работы строками в стиле языка С, не являются частью библиотеки STL. Чтобы лучше оценить и понять библиотеку STL, сначала рассмотрим проблемы, которые мы должны устранить, работая с данными, а также обсудить идеи их решения.
Опубликовал katy
April 21 2015 13:38:14 ·
0 Комментариев ·
3115 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.