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


int main () {



Download 1,38 Mb.
bet319/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   315   316   317   318   319   320   321   322   ...   437
Bog'liq
word1

int main ()




  1. {




  1. set setlntegers;








  1. // Вставить произвольные значения




  1. setlntegers.insert (43);




  1. setlntegers.insert (78);




  1. setlntegers.insert (-1);




  1. setlntegers.insert (124);



13:



  1. // Вывод содержимого набора на экран




  1. for (auto iElement = setlntegers.cbegin ()




  1. ; iElement != setlntegers.cend ()




  1. ; ++ iElement )




  1. cout « *iElement « endl;



19:



  1. // Попытаться найти элемент




  1. auto iElementFound = setlntegers.find (-1);








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



24: if (iElementFound != setlntegers.end ())



  1. cout « "Element " « *iElementFound « " found!" « endl;




  1. else




  1. cout « "Element not found in set!" « endl;



28:



  1. // Попытаться найти другой элемент




  1. auto iAnotherFind = setlntegers.find (12345);








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




  1. if (iAnotherFind != setlntegers.end ())




  1. cout « "Element " « ^iAnotherFind « " found!" « endl;




  1. else




15 3ak. 3626

450 ЗАНЯТИЕ 19. Классы наборов библиотеки STL



  1. cout « "Element 12345 not found in set!" « endl;








  1. return 0;




  1. }



Результат


- i


43


78


124


Element -1 found!


Element 12345 not found in set!


Анализ

Строки 21 -27 демонстрирую т применение функции-члена f i n d ( ) . О на возвращает итератор, сравнение которого с результатом функции en d (), как показано в строке 24, п о зволяет проверить, был ли найден элемент. Если итератор допустим, можно обратиться i значению, на которое указывает * iE le m en tF o u n d .





ПРИМЕЧАНИЕ

Пример в листинге 19.3 сработает правильно и для мультимножества, т.е. если



в строке



6 set заменить на multiset, то код продолжит работать правильно.

Удаление элементов в наборе и мультимножестве

Ассоциативные контейнеры, такие как s e t , m u l t i s e t , map и m u ltim a p , предоставля­ ют функцию -член e r a s e (), позволяющую удалять значение по ключу:




setObject.erase (key);

Другая форма функции e r a s e () позволяет удалить определенный элемент, заданны!


указывающим на него итератором:




setObject.erase (iElement);

Вы можете стереть диапазон элементов набора или мультимножества, используя ите­ раторы, задающие границы диапазона:


setObject.erase (iLowerBound, iUpperBound);

Пример в листинге 19.4 демонстрирует использование метода e r a s e () для удаленш элементов из набора или мультимножества.





  1. И С ТИ Н Г 1 9 .4 . Использование функции-члена erase () для мультимножества_______________




    1. #include




    1. #include




    1. using namespace std;



3:



  1. template




  1. void DisplayContents (const T& Input)

Простые операции с классами set и multiset библиотеки STL

451




  1. {




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




  1. ; iElement != Input.cend () // cend(): C++11




  1. ; ++ iElement )




  1. cout « *iElement « '

.1 :

  1. cout « endl;




  1. }



14:



  1. typedef multiset MSETINT;








  1. int main ()




  1. {




  1. MSETINT msetIntegers;

2 0 :



  1. // Вставить произвольные значения




  1. msetlntegers.insert (43);




  1. msetlntegers.insert (78);




  1. msetlntegers.insert (78); // Совпадение




  1. msetlntegers.insert (-1);




  1. msetlntegers.insert (124);



27:


28: cout « "multiset contains " « msetlntegers.size ()



      1. " elements.";




    1. cout « " These are: " « endl;








    1. // Вывод содержимого мультимножества на экран




    1. DisplayContents(msetlntegers);

      33:

      cout « "Please enter a number to be erased from the set"

      34:

    2. endl;




  1. int nNumberToErase = 0;




  1. cin » nNumberToErase;








  1. cout « "Erasing " « msetlntegers.count (nNumberToErase);




  1. cout « " instances of value " « nNumberToErase « endl;








  1. // Попытаться найти элемент




  1. msetlntegers.erase (nNumberToErase);



43:


44: cout « "multiset contains " « msetlntegers.size ()



    1. " elements.";




  1. cout « " These are: " « endl;




  1. DisplayContents(msetlntegers);








  1. return 0;




  1. }



Результат


multiset contains 5 elements. These are:


-1 43 78 78 124


Please enter a number to be erased from the set

452 ЗАНЯТИЕ 19. Классы наборов библиотеки STL




78


Erasing 2 instances of value 78


multiset contains 3 elements. These are:


-1 43 124


Анализ

Обратите внимание на использование в строке 15 ключевого слова ty p e d e f . Стро­ ка 38 демонстрирует применение функции c o u n t О для выяснения количества элементов





  1. определенным значением. Фактическое удаление осуществляется в строке 42, где удаля­ ются все элементы, которые соответствуют определенному числу.

Обратите внимание на то, что функция e r a s e () имеет несколько перегруженных вер­ сий. Ее можно вызвать для итератора, возвращенного, скажем, в результате поиска, чтобы удалить один элемент с найденным значением, как показано ниже.


MSETINT::iterator iElementFound = msetlntegers.find (nNumberToErase); if (iElementFound != msetlntegers.end ())


msetlntegers.erase (iElementFound);


else


cout « "Element not found!" « endl;

Точно так же вы можете использовать функцию e r a s e () для удаления из мультимно­ жества диапазона значений:


MSETINT::iterator iElementFound = msetlntegers.find (nValue);


if (iElementFound != msetlntegers.end ())


msetlntegers.erase (msetlntegers.begin (), iElementFound);

Приведенный выше фрагмент удаляет все элементы от начала до элемента со значени­ ем nV alue, не включая последнего. И набор, и мультимножество могут быть освобождены от своего содержимого при помощи функции-члена c l e a r ().


Теперь, после краткого обзора базовых функций набора и мультимножества, пришло время рассмотреть пример практического применения этого контейнерного класса. При­ мер в листинге 19.5 является самой простой реализацией телефонного справочника, по­ зволяющего пользователю вставлять имена и номера телефонов, находить их, удалять и отображать их все.


Л И СТИ Н Г 1 9 .5 . Телефонный справочник, демонстрирующий

возможности класса set библиотеки STL____________________________________________________





  1. #include




  1. #include




  1. #include




  1. using namespace std;








  1. template ctypename T>




  1. void DisplayContents (const T& Input)




  1. {




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





  1. Download 1,38 Mb.

    Do'stlaringiz bilan baham:
1   ...   315   316   317   318   319   320   321   322   ...   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