C++ за 21 день седьмое издание



Download 1,38 Mb.
bet272/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   268   269   270   271   272   273   274   275   ...   437
Bog'liq
word1

#include




    1. #include




    1. #include




    1. using namespace std;



5:



  1. in t main ()




  1. {




  1. / / Динамический массив целых чисел




  1. vector vecIntegerArray;



1 0 :



  1. / / Вставить примеры целых чисел в массив




  1. vecIntegerArray.push_back (50);




  1. vecIntegerArray.push_back (2991);




  1. vecIntegerArray.push_back (23);




  1. vecIntegerArray.push_back (9999);

    16:



















    17:

    cout «

    "The con ten ts

    of the

    vector

    are: "

    « endl;

    18:



















    19:

    / / Перебор вектора и чтение

    значений

    с помощью итератора

    20:

    vector

    < in t> : : ite r a to r

    iArrayWalker

    = vecIntegerA rray .begin ();

    2 1 :



















    22:

    w hile

    (iArrayWalker !=

    vecIntegerA rray . end

    ())

  2. {




  1. / / Вывод значения на экран




  1. cout << *iArrayWalker << endl;








  1. / / Инкремент итератора для доступа к следующему элементу




  1. ++ iArrayWalker;




  1. }

30:







31:

/ /

Поиск элемента (скажем, 2991) в массиве с использованием




/ /

алгоритма ' f i n d ' . . .

Взаимодействие контейнеров и алгоритмов с использованием итераторов

385




  1. vector ::iterator iElement = find (vecIntegerArray.begin()



23: , vecIntegerArray.end (), 2991);


24:



  1. // Проверить, найдено ли значение




  1. if (iElement != vecIntegerArray.end ())




  1. {

  2. // Значение найдено... Определить позицию в массиве:




  1. int Position = distance (vecIntegerArray.begin (), iElement);




  1. cout « "Value " « *iElement;



41: cout « " found in the vector at position: " « Position



  1. endl;




  1. }








  1. return 0;




  1. }



Результат


The contents of the vector*are:


50


2991


23


9999


Value 2991 found in the vector at position: 1


Анализ



    1. листинге 15.1 показано применение итераторов при переборе вектора и взаимодей-ствие с ним, позволяющее применить такие алгоритмы, как f in d , к таким контейнерам, как v e c to r . Объект итератора iA rra y W a lk e r объявляется в строке 20 и инициализирует­ ся началом контейнера, т.е. возвращаемым значением функции-члена b e g in () контейнера

  1. e c to r . Строки 22 -29 демонстрируют использование этого итератора в цикле для поис­ ка и отображения элементов вектора таким же способом, как и в статическом массиве. Итераторы используются соверш енно одинаково со всеми контейнерами STL. Все они предоставляют функцию b e g in (), указывающую на первый элемент, и функцию en d (),

указывающую на конец контейнера после последнего элемента. Вот почему цикл w h ile в строке 22 останавливается на элементе перед указанным функцией en d (), а не на нем. В строке 32 показано использование алгоритма f i n d для поиска значения в контейнере v e c to r . Результат операции поиска — это итератор, а успех ее выполнения проверяется при сравнении итератора с концом контейнера, как можно заметить в строке 36. Если эле­ мент найден, то он может быть отображен при обращении к значению этого итератора (как





  1. указателя). Алгоритм d i s t a n c e () применяется при вычислении позиции (смещения) найденного элемента.

Если не глядя заменить в листинге 15.1 все слова 'v e c t o r ' словом ' d e q u e ', его код все еще будет компилироваться и прекрасно работать. Это демонстрация простоты работы итераторов с алгоритмами и контейнерами.





* 3 Зак. 3626

386 ЗАНЯТИЕ 15. Введение в стандартную библиотеку шаблонов


С++11____________________________________________


Использование ключевого слова auto позволяет компилятору определить тип



  1. листинге 15.1 показано несколько объявлений итератора. Они выглядят подобно этому:




    1. vector ::iterator iArrayWalker = vecIntegerArray.begin ();

Определение типа итератора выглядит пугающе. Если вы используете компилятор, со­ вместимый со стандартом C++11, то можете упростить эту строку до следующей:





  1. auto iArrayWalker = vecIntegerArray.begin (); // тип обнаруживает




    1. компилятор

Обратите внимание, что переменную, объявленную как тип a u to , необходимо инициа­ лизировать (именно по этому инициализирующему значению компилятор может обнару­ жить тип).




т
Классы строк библиотеки STL

Библиотека STL предоставляет шаблон класса, специально предназначенного для стро­ ковых операций. Ш аблон s t d : : b a s i c _ s t r i n g <Т> используется обычно в двух своих специализациях.







s t d : : s t r i n g . Специализация шаблона s t d : : b a s i c _ s t r i n g для типа c h a r, исполь­


зуемая для манипуляций с простыми символьными строками.


s t d : :w s tr in g . Специализация шаблона s t d : : b a s i c _ s t r i n g для типа w c h a r_ t, ис­



пользуемая для манипуляций с широкими символьными строками.


Эти вспомогательные классы подробно обсуждается на занятии 16, “Классы строк би­ блиотеки STL”, где вы увидите, насколько они упрощают работу со строками.




Резюме

На сегодняшнем занятии рассматривались такие концепции библиотеки STL, как кон­ тейнеры, итераторы и базовые алгоритмы. Вы познакомились с шаблоном b a s i c _ s t r i n g <Т>, который подробно обсуждается на следующем занятии. Контейнеры, итераторы и алгоритмы — это одна из самых важных концепций библиотеки STL, и их полное пони­ мание поможет вам эффективно использовать библиотеку STL в своем приложении. Более подробная информация по этим концепциям и применению их реализации приведена на занятиях 17-25.




Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   268   269   270   271   272   273   274   275   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish