Из примеров, приведенных ранее, следует, что стандартный вектор имеет член класса, являющийся классом iterator, а также функции-члены be- gin() и end() (как и класс std::list). Однако мы не указали их в нашем классе vector в главе 19. Благодаря чему разные контейнеры могут использоваться более или менее взаимозаменяемо в обобщенном программировании, описанном ранее.
Возможно, это и так, но все-таки зайдите на сайт beatsbutik.ru - там можно узнать много интересного про то, где можно наушники beats купить. Что означает наушники beats купить, за сколько можно наушники beats купить - про это написано на сайте beatsbutik.ru. Это важная для многих тема - купить наушники beats . Спасибо за информацию про то, где наушники beats купить сайту beatsbutik.ru
Сначала опишем схему решения (игнорируя для простоты распределители памяти), а затем объясним ее.
template class vector { public:
typedef unsigned long size_type; typedef T value_type;
typedef T* iterator;
typedef const T* const_iterator;
// . . .
iterator begin(); const_iterator begin() const; iterator end(); const_iterator end() const;
size_type size();
// . . .
};
I W Оператор typedef создает синоним типа; иначе говоря, для нашего класса “1 vector имя iterator — это синоним, т.е. другое имя типа, который мы решили использовать в качестве итератора: T*. Теперь для объекта v класса vector можно написать следующие инструкции:
vector::iterator p = find(v.begin(), v.end(),32);
и
for (vector::size_type i = 0; i
Дело в том, что, для того, чтобы написать эти инструкции, нам на самом деле не обязательно знать, какие именно типы называются iterator и size_type. В частности, в приведенном выше коде, выраженном через типы iterator и size_type, мы будем работать с векторами, в которых тип size_type — это не unsigned long (как во многих процессорах встроенных систем), а тип iterator — не простой указатель, а класс (как во многих широко известных реализациях языка C++).
В стандарте класс list и другие стандартные контейнеры определены аналогично. Рассмотрим пример.
template class list { public:
class Link;
typedef unsigned long size_type; typedef Elem value_type;
class iterator; //
class const_iterator; // как iterator, но допускает изменение
// элементов
// . . .
iterator begin(); const_iterator begin() const; iterator end(); const iterator end() const;
ПРИМЕР: ПРОСТОЙ ТЕКСТОВЫЙ РЕДАКТОР
size_type size();
// . . .
};
Таким образом, можно писать код, не беспокоясь о том, что он использует: класс list или vector. Все стандартные алгоритмы определены в терминах этих имен типов, таких как iterator и size_type, поэтому они не зависят от реализации контейнеров или их вида).
Опубликовал katy
April 22 2015 09:54:07 ·
1 Комментариев ·
2858 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Oleg27 October 25 2023 16:38:49
Я вот тоже знаю, что в интернете сейчас действительно можно зарабатывать и при этом вложения в такое дело будут совсем минимальные. Вы можете просто на этом сайте 1XbEt рабочее зеркало купить прогноз, сделать ставку и почти сразу получите свои деньги обратно.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.