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



Download 1,38 Mb.
bet372/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   368   369   370   371   372   373   374   375   ...   437
Bog'liq
word1

#include




  1. #include




  1. #include




  1. #include




  1. using namespace std;








  1. template ctypename T>




  1. void DisplayContents(const T& Input)

    8 :

    {

    = Input.cbegin()

    //

    auto, cbegin: C++11

    9:

    for ( auto iElement

    10:

    ; iElement

    != Input.cend()

    //

    cend(): C++11

  2. ; ++ iElement)




  1. cout « *iElement « endl;




  1. }




  1. int main ()




  1. {




  1. list listNames;








  1. // Вставить примеры значений

    19:

    listNames.push_back

    ("John Doe");

    20:

    listNames.push_back

    ("Brad Pitt");

    21:

    listNames.push_back

    ("Jack Nicholson");

    22:

    listNames.push_back

    ("Sean Penn");

    23:

    listNames.push_back

    ("Anna Hoover");

    24:







  2. cout « "The sorted contents of the list are: " « endl;




  1. listNames.sort ();

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

541




  1. DisplayContents(listNames);








  1. cout «



"The lowest index where V'Brad Pitt\" can be inserted is: ";



  1. auto iMinlnsertPos = lower_bound ( listNames.begin (), listNames.end ()

    31:

    cout «

    , "Brad Pitt" );

    32:

    distance (listNames.begin (), iMinlnsertPos) « endl;

    33:







  2. cout «



"The highest index where V'Brad Pitt\" can be inserted is: ";



  1. auto iMaxInsertPos = upper_bound ( listNames.begin (), listNames.end (),

    36:

    cout «

    "Brad Pitt" );

    37:

    distance (listNames.begin (), iMaxInsertPos) « endl;

    38:







  2. cout « endl;







41: cout « "List after inserting Brad Pitt in sorted order: "



    1. endl;




  1. listNames.insert (iMinlnsertPos, "Brad Pitt");








  1. DisplayContents(listNames);




  1. return 0;




  1. }



Результат


The sorted contents of the list are:


Anna Hoover


Brad Pitt


Jack Nicholson


John Doe


Sean Penn


The lowest index where "Brad Pitt" can be inserted is: 1


The highest index where "Brad Pitt" can be inserted is: 2


List after inserting Brad Pitt in sorted order:


Anna Hoover


Brad Pitt


Brad Pitt


Jack Nicholson


John Doe


Sean Penn


Анализ

Элемент может быть вставлен в отсортированную коллекцию в двух потенциальных позициях: ближе к началу коллекции (итератор, возвращенной функцией lo w er_ b o u n d ()) и ближе к концу коллекции (итератор, возвращенный функцией u p p e r b o und ()). В слу­ чае листинга 23.12, где в отсортированную коллекцию вставляется строка "B ra d P i t t " , уже существующая в ней (вставлена в строке 20), верхняя и нижняя границы различаются


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

(в противном случае они бы совпадали). Применение этих функций представлено в стро­ ках 30 и 35 соответственно. Как демонстрирует вывод, при использовании для вставки строки в список итератора, возвращенного функцией lower_bound () (строка 42), список сохраняет отсортированное состояние. Таким образом, эти алгоритмы позволяют осуще­ ствить вставку в коллекцию, не нарушая порядок отсортированного содержимого. Итера­ тор, возвращенный функцией upper_bound (), также сработал бы прекрасно.







РЕКОМЕНДУЕТСЯ

Используйте метод erase () класса контей­ нера после использования алгоритмов re­ move О, remove_if() и unique () для из­ менения размера контейнера


Проверяйте на допустимость итератор, воз­ вращенный функциями find(), findJLf (), search() и searchjnO, прежде чем ис­ пользовать его для сравнения с результатом метода end () контейнера


Предпочитайте использовать функцию sta­ blejpartition{), а не функцию parti­ tion () и функцию stable_sort(), а не функцию sort () только тогда, когда относи­ тельный порядок отсортированных элементов важен, поскольку версии stablej* могут сни­ зить производительность приложения




НЕ РЕКОМЕНДУЕТСЯ

Не забывайте сортировать содержимое кон­ тейнера при помощи метода sort О, прежде чем вызывать метод unique () для удаления повторяющихся смежных значений. Функция sort О гарантирует, что все элементы с со­ впадающими значениями расположатся рядом друг с другом, делая эффективной работу функ­ ции unique {)


Не забывайте, что функцию binaryjsearch () следует вызывать только для отсортированного контейнера



Резюме

На сегодняшнем занятии рассматривался один из самых важных аспектов библиотеки STL: алгоритмы. Вы изучили различные типы алгоритмов, а примеры помогли вам лучше понять применение алгоритмов.




Вопросы и ответы



  1. М огу ли я прим енить изм еняю щ ий алгоритм , такой к а к s t d : : tr a n s f o r m (), к ас­

социативном у контейнеру, таком у к ак s t d : : s e t ?


Даже если бы это было возможно, то поступать так не нужно. Содержимое ассоциатив­ ного контейнера следует обрабатывать как константное. Дело в том, что ассоциативные контейнеры сортируют свои элементы при вставке, и относительные позиции элемен­ тов играют важную роль в таких функциях, как fin d (), а также в эффективности ра­ боты контейнера. Поэтому изменяющие алгоритмы, такие как s td : : tran sfo rm (), не должны использоваться с наборами библиотеки STL.



Коллоквиум 543



  1. Я должен присвоить определенное значение каждому элементу последовательного контейнера. Могу ли я использовать для этого алгоритм s t d : : transform () ?

Хотя алгоритм s t d : : tr a n s f o r m () для этого вполне применим, лучш е использовать алгоритм f i l l () или f i l l _ n ( ) .



  1. Изменяет ли алгоритм copy_bac]cward() расположение элементов контейнера на обратное?

Нет, он этого не делает. Алгоритм co p y b a c k w a rd () библиотеки STL изменяет на обратный порядок элементов при копировании, но не порядок хранимых элементов, т.е. копирование начинается с конца диапазона и продолжается к началу. Чтобы обра­ тить содержимое коллекции, используйте алгоритм s t d : : r e v e r s e ().



  1. Могу ли я использовать алгоритм s td :: sort () в списке?

Алгоритм s t d : : s o r t () применяется в списке таким же образом, как и в любом дру­


гом последовательном контейнере. Однако у списка есть специальное свойство: суще­ ствующие итераторы остаю тся допустимыми при операциях со списком, а функция s t d : : s o r t () не может этого гарантировать. Поэтому список STL предоставляет соб­ ственный алгоритм s o r t () в форме функции-члена l i s t :: s o r t (), который и следует использовать, поскольку он гарантирует, что итераторы на элементы списка останутся допустимыми, даже если их относительные позиции в списке изменятся.





  1. Почему так важно использовать такую функцию, как lower_bound() или upper_ bound(), при вставке в отсортированный диапазон?

Эти функции предоставляю т первую и последнюю позиции в отсортированной кол­ лекции соответственно, куда может быть вставлен элемент без нарушения порядка со­ ртировки.


Коллоквиум



  1. этом разделе предлагаются вопросы для самоконтроля и закрепления полученных знаний, а также упражнения, которые помогут применить на практике полученные навы­ ки. Попытайтесь самостоятельно ответить на эти вопросы и выполнить задания, а потом сверьте полученные результаты с ответами в приложении Г, “Ответы”. Если остались не­ ясными хотя бы некоторые из предложенных ниже вопросов, не приступайте к изучению материала следующего занятия.


Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   368   369   370   371   372   373   374   375   ...   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