|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Доступ к элементам вектора с помощью итератораКак известно, массивы и указатели тесно связаны между собой. Доступ к элементам массива осуществляется либо через указатель, либо по индексу. В библиотеке STL наблюдается аналогичная ситуация, только роли массивов и указателей играют векторы и итераторы. Доступ к элементам вектора обеспечивается по индексу либо через итератор. Для объявление итератора следует указать тип вектора через двойное двоеточие написать слово iterator, после чего через разделитель записать имя итератора. Например,
vector<char> v(10); // Создаем вектор из 10 элементов. vector<char>::iterator p; // создаем итератор. Рассмотрим соответствующий пример программы.
// Доступ к элементам вектора <: помощью итератора. #include"stdafx.h" // Доступ к элементам вектора <: помощью итератора. #include <iostream> #include <vector> #include <windows.h> #include <cctype> using namespace std; int main() { vector<char> v(10); // Создаем вектор из 10 элементов. vector<char>::iterator p; // создаем итератор. int i; // Присваиваем элементам вектора определенные значения. p = v.begin(); i = 0; while (p!= v.end()) { *p = i + 'a'; p++; i++; } SetConsoleOutputCP(1251); // Выводим содержимое вектора на экран, cout << "Исходное содержимое:\n"; p = v.begin (); while(p!= v.end()) { cout <<*p << " "; p++; } cout <<"\n\n"; // Изменяем содержимое вектора. p = v.begin(); while(p!= v.end()) { *p = toupper(*p); p++; } // Выводим содержимое вектора на экран, cout << "Модифицированное содержимое\n"; p = v.begin(); while(p!= v.end()) { cout<< *p <<" "; p++; } cout <<endl; char z; cin>>z; return 0; }
Результаты работы этой программы приведены ниже.
Обратите внимание на то, как объявлен итератор р. Тип iterator определен в контейнерном классе. Следовательно, чтобы получить итератор для элементов конкретного контейнера, необходимо использовать объявление, аналогичное показанному в примере: просто указывать имя контейнера и спецификатор iterator. В данной программе итератор р установлен в начало вектора. Для этого используется функция begin(). Эта процедура аналогична применению указателей для доступа к элементам массива. Для того чтобы распознать конец вектора, вызывается функция end(). Эта функция возвращает итератор, установленный на элемент, следующий за последним элементом вектора. Таким образом, если итератор р равен значению v.end(), значит, обнаружен конец вектора.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |