Для пользователей, которые регистрируются. Если Вам не приходит письмо с подтверждением email, пишите на admin[at]quizful[dot]net - будем подтверждать вручную. Просим прощения за доставленные неудобства.

С уважением,
команда Quizful
Знаете ли Вы, что

В разделе "Статьи" можно найти обучающие статьи по информационным технологиям, а также узнать о новостях сервиса Quizful.

Топ контрибуторов
loading
loading
Лента обновлений
ссылка May 17 19:13
Комментарий от elirijndael:
Полностью согласен с valid_name.
ссылка May 17 18:47
Комментарий от Aleksandr89:
Неплохой тест. Для тех кто хочет ещё попрактиковатьс...
ссылка May 17 15:13
Комментарий от dpdpdp:
Поменяйте радиокнопки на чекбоксы.
Во втором варианте про...
ссылка May 17 11:55
Комментарий от Torredo812:
вот это подвох!!!
забываешь что х увеличился))и думае...
ссылка May 17 10:50
Комментарий от lesha1980:
Хороший вопрос. Получается, что проверяется только x в...
Статистика

Тестов: 130, вопросов: 5791. Пройдено: 126748 / 526541.

Итераторы STL

Автор: QQQ  к списку      

Вопрос
Общее понятие итератора STL. Итератор возвращающий значение "за пределом".
Ответ

STL (Standart Template Librаry) - библиотека, ставшая первым масштабным шагом к упрощению работы программиста, содержащая наиболее часто употребляемые конструкции, шаблоны функций, "объемные ящики" предназначенные для хранения важной информации(упорядоченной или неупорядоченной, например:vector, list, multiset...), доступ к данным которых осуществляется через заранее прописанные методы-функции (предполагающие для начала создание определенных классов с методами шаблонизированного типа).

Для начала хотелось бы отметить, что главным атрибутом STL является итератор - удобная обертка для указателей, выполненных как шаблоны классов. Кстати говоря, обычный указатель тоже можно считать итератором, правда, очень примитивным. Итераторы обладают массой достоинств, например таких, как автоматическое отслеживание размера типа, на который указывает итератор, или автоматизированные операции инкремента и декремента для перехода от элемента к элементу. Именно благодаря этим возможностям итераторы и являются фундаментом всей библиотеки.

Чтобы было более понятно, можно привести пример вывода элементов массива, состоящего из 5 элементов:
пусть у нас имеется массив чисел, которые нужно распечатать. Тогда программа печати с использованием for_each может выглядеть так:


#include <iostream>
#include <algorithm>
using namespace std;

void printValue(int num)
{
  cout << num << "\n";
}

main(void)
{
  int init[] = {1, 2, 3, 4, 5};
  for_each(init, init + 5, printValue);
}

Вызывается алгоритм for_each, ему в качестве входных итераторов передаются указатели на начало массива и на адрес, следующий за концом массива, т. е. на значение "за пределами". Третьим параметром является указатель на функцию printValue, которая печатает элементы массива. Чтобы включить в программу возможность использования потоков, добавляется включаемый файл iostream, а для описания прототипа алгоритма for_each в программу включается заголовочный файл algorithm (algorith для продуктов Borland). Обязательным при использовании STL является использование директивы using namespace std, включающей пространство имен библиотеки STL.

А теперь продолжим знакомство с итераторами. Итераторы можно условно разделить на две категории: основные и вспомогательные. Но прежде чем перейти к подробному описанию и тех и других, необходимо остановиться на двух важных правилах работы с итераторами: получение итераторов и отслеживания значения "за пределом". Многие функции и методы классов STL возвращают итераторы, вместо того чтобы производить действия над обычными указателями С++. Классы STL, хранящие информацию, возвратят итератор, указывающий на первый элемент данных, если вызвать их метод begin(). Напротив, вызов метода end() приводит к возврату значения "за пределом" (past-the-end). Так называется значение итератора, при котором он указывает на элемент, следующий за последним разрешенным для ссылки элементом. Начиная со значения "за пределом", находится область данных, из которой нельзя читать и куда нельзя записывать. Нарушение этого запрета приведет к непредсказуемому результату. Представьте себе массив, например, из 10 элементов. Если итератор ссылается на некий одиннадцатый элемент, то говорят, что он ссылается на значение "за пределом". Разумеется, попытка записать в несуществующий элемент данные или оперировать данными этого элемента, как достоверными, приведет к неопределенному результату. Если бы вы попытались проделать такую операцию с блоком памяти в среде Windows, то немедленно получили бы исключение выхода за предел, что, скорее всего, окончилось бы аварийным завершением программы. Вот и судите сами, насколько важно следить за значением "за пределом".Каждый итератор взаимозаменяем, необходимо лишь учитывать иерархию:
1) двунаправленный итератор;
2) однонаправленный итератор;
3-4) соответственно итератор ввода и вывода;
Из всего вышеизложенного хотела бы отметить, что использование STL требует от нас повышенного внимания, так как корректное использование шаблонов - это итог надлежащей работы как на практике так и в теории.Надеюсь было познавательно, спасибо за внимание.

Если Вам понравился вопрос, проголосуйте за него

Голосов: 4  loading...
Sky4CE   ORKA   art   lestat88