Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet144/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   140   141   142   143   144   145   146   147   ...   193
Bog'liq
Book-qtC


Глава 10. Объектно-ориентированное программирование
К элементам контейнера — например, vector — можно обращаться и по но-
мерам, как к элементам классического массива — и с помощью итераторов:
Необъектный подход
Правильный (объектный) подход
#include 
#include 
using namespace s t d ;
main ( )
{
v e c t o r  a ;
//добавляем элементы
a . push_back ( 1 ) ;
a . push_back ( 4 ) ;
a . push_back ( 8 ) ;
f o r ( i n t y =0;y{
//выводим 1 4 8
cout<}
}
#include 
#include 
using namespace s t d ;
main ( )
{
v e c t o r  a ;
v e c t o r  : : i t e r a t o r i t ;
//добавляем элементы
a . push_back ( 1 ) ;
a . push_back ( 4 ) ;
a . push_back ( 8 ) ;
f o r ( i t=a . b e g i n ( ) ; i t != a . end ( ) ; i t ++)
{
//выводим 1 4 8
cout <<∗i t <<" " ;
}
}
В отличие от счётчика цикла, итератор обеспечивает доступ к элементу, а не
только его перебор. В отличие от операции индексации, итератор «не портится»
при добавлении в контейнер новых элементов. Кроме того, индексация иногда
вообще неприменима — например, в коллекциях с медленным произвольным до-
ступом, таких как списки (list).
Рассмотрим, как использовать контейнеры на примере класса vector:
#include 
#include 
#include 
using namespace s t d ;
main ( )
{
//Объявляем вектор из целых чисел
v e c t o r  k ;
//Добавляем элементы в конец вектора
k . push_back ( 2 2 ) ;
k . push_back ( 1 1 ) ;
k . push_back ( 4 ) ;
k . push_back ( 1 0 0 ) ;
v e c t o r  : : i t e r a t o r p ;
c o u t << "Вывод неотсортированного вектора:\ n " ;
f o r ( p = k . b e g i n ( ) ; pc o u t << ∗p << ’ ’ ;
}
//Сортировка вектора.
s o r t ( k . b e g i n ( ) , k . end ( ) ) ;
c o u t << " \ nВывод отсортированного вектора:\ n " ;
f o r ( p = k . b e g i n ( ) ; p{
c o u t << ∗p << ’ ’ ;
}
c o u t << e n d l ;
}
Как видно, пример сначала заполняет вектор целых чисел четырьмя значе-
ниями, затем поэлементно выводит содержимое вектора на экран, сортирует с
Программирование на языке С++ в среде Qt Creator


10.7. Элементы стандартной библиотеки C++
325
использованием алгоритма sort, а затем снова выводит на экран. Вывод про-
граммы выглядит следующим образом:
Вывод неотсортированного вектора:
22 11 4 100
Вывод отсортированного вектора:
4 11 22 100
10.7.4
Алгоритмы
В состав стандартной библиотеки входит группа функций, выполняющих
некоторые стандартные действия, например поиск, преобразование, сортировку,
поштучный перебор элементов, копирование и т. д. Они называются алгоритма-
ми
. Параметрами для алгоритмов, как правило, служат итераторы. Алгоритму
нет никакого дела до типа переданного ему итератора, лишь бы итератор под-
падал под определённую категорию. Так, если параметром алгоритма должен
быть однонаправленный итератор, то подставляемый итератор должен быть ли-
бо однонаправленным, либо двунаправленным, либо итератором произвольного
доступа.
Например, алгоритм простого поиска find просматривает элементы подряд,
пока нужный не будет найден. Для такой процедуры вполне достаточно ите-
ратора ввода. С другой стороны, алгоритм более быстрого бинарного поиска
binary_search
должен иметь возможность переходить к любому элементу по-
следовательности, и поэтому требует итератора с произвольным доступом.
Многие алгоритмы получают в качестве параметра различные функции. Эти
функции используются для сравнения элементов, их преобразования и т. д. Од-
нако вызов функции по указателю — ресурсоёмкая операция. Вместо указателя
на функцию можно передать объект любого класса с перегруженным оператором
вызова функции operator(). Одно из преимуществ обращения к переопределён-
ному оператору вызова функции вместо собственно её вызова заключается в том,
что переопределённый оператор может быть реализован в классе как встроенная
функция, т. е. код оператора будет подставлен вместо вызова.
Рассмотрим пример алгоритма find, который находит первое вхождение за-
данного значения в коллекцию. Алгоритм принимает в качестве аргументов пару
итераторов и искомое значение; соответственно возвращается итератор, указы-
вающий на первое вхождение заданного значения. Благодаря универсальности
механизма итераторов, алгоритм будет работать со структурой любого типа, в
том числе и с обычными массивами языка C. Например, чтобы найти первое
вхождение числа 7 в массив целых, требуется выполнить следующий код, ис-
пользующий в качестве итераторов обычные указатели:
i n t data [ 1 0 0 ] ;
. . .
i n t ∗ where ;
where = f i n d ( data , data +100 , 7 ) ;
Поиск первого значения в целочисленном векторе выглядит приблизительно
так же:
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


326
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   140   141   142   143   144   145   146   147   ...   193




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