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



Download 1,38 Mb.
bet359/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   355   356   357   358   359   360   361   362   ...   437
Bog'liq
word1

#include



3:

520 ЗАНЯТИЕ 23. Алгоритмы библиотеки STL



  1. // Унарный предикат для функций *_if




  1. template




  1. bool IsEven (const elementType& number)

  2. /

    8

    return

    ((number

    % 2) == 0); // true, если четное

    Q

    s\



















    10

    int main

    ()













    11













    12

    {




    namespace

    std;







    13

    using







    14

    vector

    veclntegers;







    15

    cout

    «

    "Populating a vector with values from -9 to 9"

    16

    17

    for

    «

    endl;

    -9; nNum < 10; ++ nNum)




    (int nNum =




    18




    veclntegers.push_back

    (nNum);




    19

    // Использование

    алгоритма count для определения количества 'O'

    20

    21

    size

    t nNumZeroes

    = count

    (veclntegers.begin (),

    22:

    cout

    «

    "Number

    of




    veclntegers.end

    0,0);

    instances of 'O': " «

    nNumZeroes « endl

    23




    «

    endl;


































  3. // Использование алгоритма count if с унарным предикатом IsEven:




  1. size_t nNumEvenElements = count_if (veclntegers.begin () /.

    26

    veclntegers.end (),

    27

    IsEven );

    cout « "Number of even elements: " « nNumEvenElements « endl;

    28

  2. cout « "Number of odd elements: ";




  1. cout « veclntegers.size () - nNumEvenElements « endl;








  1. return 0;




  1. }



Результат


Populating a vector with values from -9 to 9 Number of instances of 'O': 1
Number of even elements: 9


Number of odd elements: 10


Анализ

В строке 21 алгоритм c o u n t () использован для определения количества значений 0 в векторе v e c to r < in t> . Точно так же в строке 25 алгоритм c o u n t i f () использован для определения количества четных чисел в векторе. Обратите внимание на третий параметр, которым является унарный предикат IsE v e n (), определенный в строках 6 -9 . Количество элементов с нечетными значениями в векторе вычисляется при вычитании возвращаемого значения функции c o u n t _ i f () из общего количества содержавшихся в векторе элемен­ тов, возвращаемого функцией s i z e ().


Использование алгоритмов STL 521


ПРИМЕЧАНИЕ В листинге 23.2 алгоритм count_if () использует функцию предиката IsEv­


en (), тогда как в листинге 23.1 используется лямбда-функция, выполняющая

работу функции isEven () в алгоритме find_if ( ) .


Лямбда-версия экономит строки кода, но следует помнить, что если бы два примера были объединены, функция IsEven () была бы применима как в ал­ горитме find_if (), так и в count_if О ,обеспечивая возможность много­ кратного использования.


Поиск элемента или диапазона в коллекции



  1. листинге 23.1 продемонстрирована возможность поиска элемента в контейнере. Но иногда необходимо найти диапазон значений или шаблон. В таких ситуациях следует ис­

пользовать алгоритм s e a r c h () или s e a r c h _ n (). Алгоритм s e a r c h () применяется для проверки наличия одного диапазона в другом:




auto iRange = search ( veclntegers.begin () // Начало диапазона


, veclntegers.end () // Конец диапазона


// для поиска



  1. listlntegers.begin () // Начало диапазона




    1. для поиска




  1. listlntegers.end () ); // Конец диапазона




    1. для поиска

Алгоритм s e a r c h _ n () применяется для проверки наличия в контейнере л экземпля­ ров значения, расположенных последовательно:




auto iPartialRange = search_n ( veclntegers.begin () // Начало диапазона


, veclntegers.end () // Конец диапазона



  1. 3// Количество искомых элементов




  1. 9 ); // Искомый элемент

Обе функции возвращают итератор на первый экземпляр найденной последовательно­ сти, а перед применением этот итератор следует сравнить с результатом функции en d (). В листинге 23.3 показано применение алгоритмов s e a r c h () и s e a r c h n ().


Л И СТИ Н Г 2 3 .3 . Поиск диапазона в коллекции с использованием


алгоритмов search () и search n ()_________________________________________________





  1. #include




  1. #include




  1. #include




  1. #include




  1. using namespace std;








  1. template ctypename T>




  1. void DisplayContents (const T& Input)



8 : {



  1. for(auto iElement = Input.cbegin() // auto, cbegin и cend: C++11




  1. ; iElement != Input.cend()




  1. ; ++ iElement )




  1. cout « *iElement « '



13:

522 ЗАНЯТИЕ 23. Алгоритмы библиотеки STL



  1. cout « endl;












  1. int main ()




  1. {




  1. // Пример контейнера (вектор целых чисел, содержащий // значения от -9 до 9)

2 0 : vector veclntegers;


2 1 : for (int nNum = -9; nNum < 10; ++ nNum)



  1. veclntegers.push_back (nNum);








  1. // Вставить в вектор еще несколько примеров значений




  1. veclntegers.push_back (9);




  1. veclntegers.push_back (9);



27:



  1. // Еще один пример контейнера (список целых чисел от -4 до 4)




  1. list listlntegers;




  1. for (int nNum = -4; nNum <5; ++ nNum)




  1. listlntegers.push_back (nNum);



32:



  1. cout « "The contents of the sample vector are: " « endl;




  1. DisplayContents (veclntegers);



35:



  1. cout « "The contents of the sample list are: " « endl;




  1. DisplayContents (listlntegers);



38:



  1. cout « "search() for the contents of list in vector:" « endl;

    40:

    auto iRange = search ( veclntegers.begin

    ()

    // Начало диапазона

    41:

    , veclntegers.end ()




    // Конец диапазона

    42:

    , listlntegers.begin

    ()

    // для поиска

    // Начало диапазона

    43:

    , listlntegers.end

    ()

    );

    // для поиска

    // Конец диапазона

    44:










    // для поиска













  2. // Проверка успеха поиска




  1. if (iRange != veclntegers.end О)




  1. {




  1. cout « "Sequence in list found in vector at position: ";




  1. cout « distance (veclntegers.begin (), iRange) « endl;




  1. }



51:


52: cout « "Searching {9, 9, 9} in vector using search_n(): "



    1. endl;




  1. auto iPartialRange = search_n ( veclntegers.begin () // Начало

    54:

    , veclntegers.end

    //

    диапазона

    () //

    Конец диапазона

    55:

    , 3

    //

    Количество искомых элементов

    56:

    ,9);

    //

    Искомый

    элемент

    57:

















  2. Download 1,38 Mb.

    Do'stlaringiz bilan baham:
1   ...   355   356   357   358   359   360   361   362   ...   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