Задача этой книги дать краткое и четкое изложение языка С++ в соответствии со стандар том iso/iec 14882. Она предназначена для студентов, изучающих язык «с нуля»


Множества с дубликатами (multiset)



Download 2 Mb.
bet184/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   180   181   182   183   184   185   186   187   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Множества с дубликатами (multiset)


Âî ìíîæåñòâaõ ñ äóáëèêaòaìè êëþ÷è ìîãóò ïîâòîðяòüñя, ïîýòîìó îïåðaöèя âñòaâêè ýëåìåíòa âñåãäa âûïîëíяåòñя óñïåøíî, è ôóíêöèя insert âîçâðaùaåò èòåðaòîð ía âñòaâëåííûé ýëåìåíò. Ýëåìåíòû ñ îäèíaêîâûìè êëþ÷aìè õðaíяòñя â ñëîâaðå â ïîðяäêå èõ çaíåñåíèя. Ôóíêöèя find âîçâðaùaåò èòåðaòîð ía ïåðâûé íaéäåííûé ýëåìåíò èëè end(), åñëè íè îäíîãî ýëåìåíòa ñ çaäaííûì êëþ÷îì íå íaéäåíî.
Ïðè ðaáîòå ñ îäèíaêîâûìè êëþ÷aìè â multiset ÷añòî ïîëüçóþòñя ôóíêöèяìè COunt, lOwer_bOund, upper_bOund è equal_range, èìåþùèìè òîò æå ñìûñë, ÷òî è äëя ñëîâaðåé ñ äóáëèêaòaìè.


Битовые множества (bitset)


Áèòîâîå ìíîæåñòâî ïðåäñòaâëяåò ñîáîé øaáëîí äëя ïðåäñòaâëåíèя è îáðaáîòêè äëèííûõ ïîñëåäîâaòåëüíîñòåé áèòîâ1. Ôaêòè÷åñêè bitset — ýòî áèòîâûé ìaññèâ, äëя êîòîðîãî îáåñïå÷èâaþòñя îïåðaöèè ïðîèçâîëüíîãî äîñòóïa, èçìåíåíèя îò- äåëüíûõ áèòîâ è âñåãî ìaññèâa. Áèòû íóìåðóþòñя ñïðaâa íaëåâî, ía÷èíaя ñ 0.
Øaáëîí áèòîâîãî ìíîæåñòâa îïðåäåëåí â çaãîëîâî÷íîì ôaéëå . Ïaðaìåò- ðîì øaáëîía яâëяåòñя äëèía áèòîâîé ïîñëåäîâaòåëüíîñòè, êîòîðaя äîëæía áûòü êîíñòaíòîé:
template Class bitset{… };
Äëя aäðåñaöèè îòäåëüíîãî áèòa â bitset ââåäåí êëaññ referenCe: Class referenCe {
friend Class bitset;
referenCe(); publiC:
~referenCe();
referenCe& OperatOr=(bOOl x); // äëя b[i] = x; referenCe& OperatOr=(COnst referenCe&); // äëя b[i] = b[j]; bOOl OperatOr~() COnst; // èíâåðñèя b[i]
OperatOr bOOl() COnst; // äëя x = b[i];
referenCe& flip(); // äëя èíâåðñèè b[i];
};
Êîíñòðónòîðû ïîçâîëяþò ñîçäaòü áèòîâîå ìíîæåñòâî èç âñåõ íóëåé, èç çía÷åíèя òèïa lOng èëè èç ñòðîêè òèïa string2:
bitset(); // 1
bitset(unsigned lOng val); // 2


1 Ìîæåò îêaçaòüñя, ÷òî â çaâèñèìîñòè îò ðåaëèçaöèè áèòîâûå ïîñëåäîâaòåëüíîñòè, äëя ðaçìåùåíèя êîòîðûõ íåäîñòaòî÷íî ïåðåìåííîé òèïa int, íî äîñòaòî÷íî lOng, áîëåå ýô- ôåêòèâíî îáðaáaòûâaòü ñ ïîìîùüþ áèòîâûõ îïåðaöèé íaä öåëûìè ÷èñëaìè (ñì. 31). Êîðîòêèå ïîñëåäîâaòåëüíîñòè, óìåùaþùèåñя â îäíîì ñëîâå, ìîãóò îáðaáaòûâaòüñя ñ ïî- ìîùüþ áèòîâîãî ìíîæåñòâa áîëåå ýôôåêòèâíî.
2 Îïèñaíèå êîíñòðóêòîðîâ ïðèâåäåíî ñ ñîêðaùåíèяìè.

expliCit bitset(COnst string& str, // 3 string::size_type pOs = 0, string::size_type n = string::npOs);


Ïåðâûé êîíñòðóêòîð ñîçäaåò áèòîâîå ìíîæåñòâî èç íóëåé, âòîðîé ïðèíèìaåò çía÷åíèå òèïa lOng è èíèöèaëèçèðóåò êaæäûé áèò ìíîæåñòâa ñîîòâåòñòâóþùèì áèòîì âíóòðåííåãî ïðåäñòaâëåíèя ýòîãî çía÷åíèя. Òðåòèé êîíñòðóêòîð ïðèíèìa- åò ñòðîêó, êîòîðaя äîëæía ñîñòîяòü èç íóëåé è åäèíèö (åñëè ýòî íå òaê, ïîðîæäa- åòñя èñêëþ÷åíèå invalid_argument) è èíèöèaëèçèðóåò êaæäûé áèò ìíîæåñòâa â ñîîòâåòñòâèè ñî çía÷åíèåì ñèìâîëa ñòðîêè. Âòîðîé è òðåòèé ïaðaìåòðû êîíñò- ðóêòîða çaäaþò ïîçèöèè ía÷aëa ñòðîêè è êîëè÷åñòâa ñèìâîëîâ, êîòîðûå èñïîëü- çóþòñя äëя èíèöèaëèçaöèè. Ïî óìîë÷aíèþ èñïîëüçóåòñя âñя ñòðîêa.
Ïðèìåðû ñîçäaíèя áèòîâûõ ìíîæåñòâ:



bitset <100> b1;

// ñòî íóëåé

bitset <16> b2 (0xf0f);

// 0000111100001111

bitset <16> b3 ("0000111100001111");

// 0000111100001111

bitset <5> b4 ("00110011", 3);

// 10011

bitset <3> b5 ("00110101", 1, 3);

// 011

C áèòîâûìè ìíîæåñòâaìè ìîæíî âûïîëíяòü ñëåäóþùèå îïåðaöèè:
bOOl OperatOr==(COnst bitset& rhs) COnst; bOOl OperatOr!=(COnst bitset& rhs) COnst; bitset& OperatOr&=(COnst bitset& rhs); bitset& OperatOr|=(COnst bitset& rhs); bitset& OperatOr^=(COnst bitset& rhs); bitset OperatOr<<(size_t pOs) COnst; bitset OperatOr>>(size_t pOs) COnst; bitset& OperatOr<<=(size_t pOs); bitset& OperatOr>>=(size_t pOs); bitset& set();
bitset& set(size_t pOs, int val = true); bitset& reset();
bitset& reset(size_t pOs); bitset OperatOr~() COnst; bitset& flip();
bitset& flip(size_t pOs);
referenCe OperatOr[](size_t pOs); // b[i];
Ìíîæåñòâa ìîæíî ñðaâíèâaòü ía ðaâåíñòâî (= =) è íåðaâåíñòâî (!=). Îïåðaöèè << è >> ñîçäaþò áèòîâûå íaáîðû, ñäâèíóòûå ía pOs áèò âëåâî èëè âïðaâî ñîîòâåòñò- âåííî. Ïðè ñäâèãå îñâîáîæäaþùèåñя ïîçèöèè çaïîëíяþòñя íóëяìè. Îïåðaöèя set óñòaíaâëèâaåò âñå áèòû ìíîæåñòâa â 1, reset — â 0. Îïåðaöèя ~ ñîçäaåò äîïîë- íèòåëüíûé íaáîð. C ïîìîùüþ flip ìîæíî èíâåðòèðîâaòü çía÷åíèå êaæäîãî áèòa èëè áèòa, çaäaííîãî ïaðaìåòðîì pOs.
Äîñòóï ê îòäåëüíîìó áèòó ìîæíî âûïîëíяòü ñ ïîìîùüþ îïåðaöèè èíäånñaöèè. Åñëè çía÷åíèå èíäåêña âûõîäèò ça ãðaíèöû íaáîða, ïîðîæäaåòñя èñêëþ÷åíèå Out_Of_range.

 øaáëîíå bitset îïðåäåëåíû ìåòîäû ïðåîáðaçîâaíèя â äëèííîå öåëîå è â ñòðî- êó, a òaêæå aíaëèça çía÷åíèé ìíîæåñòâa:


unsigned lOng tO_ulOng() COnst; // â unsigned lOng string tO_string() COnst; // â string
size_t COunt() COnst; // êîëè÷åñòâî áèòîâûõ 1
size_t size() COnst; // êîëè÷åñòâî áèòîâ
bOOl test(size_t pOs) COnst; // true, åñëè b[pOs]== 1
bOOl any() COnst; // true, åñëè õîòя áû îäèí áèò ðaâåí 1
bOOl nOne() COnst; // true, åñëè íè îäèí áèò íå ðaâåí 1
Îïðåäåëåíû òaêæå îáû÷íûå îïåðaöèè ââîäa è âûâîäa << è >>. Áèòû ìíîæåñòâa âûâîäяòñя ñ ïîìîùüþ ñèìâîëîâ '0' è '1' ñëåâa íaïðaâî, ñaìûé ñòaðøèé áèò ñëåâa.
 áèòîâîì ìíîæåñòâå íå îïðåäåëåíû èòåðaòîðû, ïîýòîìó îíî íå яâëяåòñя êîí- òåéíåðîì â ÷èñòîì âèäå, ïîñêîëüêó íå ïîëíîñòüþ îáåñïå÷èâaåò ñòaíäaðòíûé èí- òåðôåéñ êîíòåéíåðîâ.



Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   180   181   182   183   184   185   186   187   ...   232




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