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



Download 2 Mb.
bet218/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   214   215   216   217   218   219   220   221   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Класс valarray


Äëя ýôôåêòèâíîé ðaáîòû ñ ìaññèâaìè ÷èñåë â ñòaíäaðòíîé áèáëèîòåêå îïðåäå- ëåí øaáëîííûé êëaññ valarray. Îïåðaöèè ñ ýòèì êëaññîì ðåaëèçîâaíû ñ ðañ÷åòîì ía èõ ïîääåðæêó â aðõèòåêòóðaõ âûñîêîïðîèçâîäèòåëüíûõ ñèñòåì.  áèáëèîòåêå îïèñaíû òaêæå ÷åòûðå âñïîìîãaòåëüíûõ êëañña, ïîçâîëяþùèõ ïîëó÷èòü ðaçëè÷- íûå ïîäìíîæåñòâa valarray: sliCe_array, gsliCe_array, mask_array è indireCt_array. Âñå ýòè êëaññû ðåaëèçîâaíû êaê øaáëîíû êëaññîâ ñ ïaðaìåòðîì, ïðåäñòaâëяþ- ùèì ñîáîé òèï ýëåìåíòa ìaññèâa.
Äëя èñïîëüçîâaíèя êëañña valarray è ñâяçaííûõ ñ íèì ñðåäñòâ òðåáóåòñя ïîäêëþ-
÷èòü ê ïðîãðaììå çaãîëîâî÷íûé ôaéë .  íåì îïèñaíû, êðîìå ïåðå÷èñ- ëåííûõ øaáëîíîâ êëaññîâ, êëaññû sliCe è gsliCe, çaäaþùèå ïîäìíîæåñòâa èíäåê- ñîâ ìaññèâa, a òaêæå çaãîëîâêè ôóíêöèé, ïðåäíaçía÷åííûõ äëя ðaáîòû ñ ýòèìè øaáëîíaìè è êëaññaìè.
Øaáëîí sliCe_array ïðåäñòaâëяåò ñîáîé ñòðîêó, ñòîëáåö èëè äðóãîå ðåãóëяðíîå ïîäìíîæåñòâî ýëåìåíòîâ valarray (íaïðèìåð, åãî ÷åòíûå ýëåìåíòû). C ïîìîùüþ ýòîãî øaáëîía ìîæíî ïðåäñòaâëяòü valarray êaê ìaòðèöó ïðîèçâîëüíîé ðaçìåð- íîñòè.
Øaáëîí gsliCe_array ïîçâîëяåò çaäaâaòü áîëåå ñëîæíûå çaêîíû ôîðìèðîâaíèя ïîäìíîæåñòâa ìaññèâa, a mask_array — ïðîèçâîëüíûå ïîäìíîæåñòâa ñ ïîìîùüþ áèòîâîé ìañêè. Øaáëîí indireCt_array ñîäåðæèò íå ñaìè ýëåìåíòû ìaññèâa, è èõ èíäåêñû.


 êëaññå valarray îïðåäåëåíû nîíñòðónòîðû, ïîçâîëяþùèå ñîçäaâaòü ïóñòîé ìañ- ñèâ è ìaññèâ, çaïîëíåííûé îäèíaêîâûìè èëè çaäaííûìè çía÷åíèяìè:
template Class valarray{ publiC:
// Ìaññèâ íóëåâîãî ðaçìåða:
valarray();
// Ìaññèâ èç n ýëåìåíòîâ (ê êazäîìó ïðèìåíяåòñя
// êîíñòðóêòîð ïî óìîë÷aíèþ:
expliCit valarray(size_t n);
// Ìaññèâ èç n ýëåìåíòîâ ñî çía÷åíèåì v: valarray(COnst T& v, size_t n);
// Ìaññèâ èç n ýëåìåíòîâ ñî çía÷åíèяìè èç ìaññèâa m: valarray(COnst T* m, size_t n);
// Êîíñòðóêòîð êîïèðîâaíèя valarray(COnst valarray&);
// Ìaññèâ ñî çía÷åíèяìè èç ñðåça: valarray(COnst sliCe_array&);
// Ìaññèâ ñî çía÷åíèяìè èç îáîáùåííîãî ñðåça: valarray(COnst gsliCe_array&);
// Ìaññèâ ñî çía÷åíèяìè èç ïîäìíîzåñòâa: valarray(COnst mask_array&);
// Ìaññèâ ñî çía÷åíèяìè èç indireCt_array: valarray(COnst indireCt_array&);

}
Ïðèìåðû ñîçäaíèя ìaññèâîâ:
valarray v1; // Ïóñòîé ìaññèâ
valarray v2(100); // Ìaññèâ èç 100 ýëåìåíòîâ,
// êazäûé ïî óìîë÷aíèþ îáíóëåí valarray v3(5, 100); // Ìaññèâ èç 100 ýëåìåíòîâ, ðaâíûõ 5 COnst int m = {4, 4, 3, 6, 2};
valarray v4(m, 5); // Ìaññèâ èç 5 ýëåìåíòîâ: 4,4,3,6,2
 ìaññèâaõ îïðåäåëåíû îïåðaöèè äîñòóïa ïî èíäånñó è ïðèñâaèâaíèя:
T OperatOr[](size_t) COnst; T& OperatOr[](size_t);
// Êîïèðîâaíèå ìaññèâa:
valarray& OperatOr=(COnst valarray&);
// Ïðèñâaèâaíèå îäíîãî è òîãî zå çía÷åíèя âñåì ýëåìåíòaì: valarray& OperatOr=(COnst T&);
// Ïðèñâaèâaíèå ïîäìíîzåñòâ ìaññèâó valarray:
valarray& OperatOr=(COnst sliCe_array&); valarray& OperatOr=(COnst gsliCe_array&); valarray& OperatOr=(COnst mask_array&); valarray& OperatOr=(COnst indireCt_array&);
Íóìåðaöèя ýëåìåíòîâ ìaññèâa valarray ía÷èíaåòñя ñ 0. Ïðîâåðêa âûõîäa ça ïðå- äåëû äèaïaçîía íå ïðîèçâîäèòñя.

Êðîìå ïðèâåäåííûõ âûøå, îïðåäåëåíû îïåðaöèè îáîáùåííîé èíäåêñaöèè, èëè èçâëå÷åíèя ïîäìaññèâîâ èç valarray1:


valarray OperatOr[](sliCe) COnst; sliCe_array OperatOr[](sliCe);
valarray OperatOr[](COnst gsliCe&) COnst; gsliCe_array OperatOr[](COnst gsliCe&);
valarray OperatOr[](COnst valarray&) COnst; mask_array OperatOr[](COnst valarray&); valarray OperatOr[](COnst valarray&) COnst; indireCt_array OperatOr[](COnst valarray&);
Ôîðìû îïåðaöèé ñ COnst âîçâðaùaþò ïîäìíîæåñòâî êaê íîâûé ìaññèâ òèïa
valarray, a ôîðìû áåç COnst — êaê ìaññèâ ñîîòâåòñòâóþùåãî òèïa.
Îïðåäåëåíû óíaðíûå îïåðaöèè +, –, ~ è !, áèíaðíûå îïåðaöèè +, –, *, /, %, ^, &, |, <<,
>>, a òaêæå ñîîòâåòñòâóþùèå ñëîxíûå ïðèñâaèâaíèя (+=, *= è ò. ä.), âòîðûì îïå- ðaíäîì êîòîðûõ ìîæåò áûòü êaê ÷èñëî, òaê è ìaññèâ, íaïðèìåð:
valarray& OperatOr+= (COnst T&); valarray& OperatOr+= (COnst valarray&);
 ïåðâîì ñëó÷aå êaæäûé ýëåìåíò ìaññèâa óâåëè÷èâaåòñя ía çaäaííîå ÷èñëî, a âî âòîðîì âûïîëíяåòñя ïî÷ëåííîå ñëîæåíèå ñîîòâåòñòâóþùèõ ýëåìåíòîâ äâóõ ìañ- ñèâîâ. Îïåðaöèè ïðèìåíèìû ê ìaññèâaì, äëя ýëåìåíòîâ êîòîðûõ îíè яâëяþòñя äîïóñòèìûìè. Åñëè ðaçìåðû ìaññèâîâ, ó÷añòâóþùèõ â îïåðaöèè, íå ñîâïaäaþò, ðåçóëüòaò íå îïðåäåëåí. Îïåðaöèè << è >> îáîçía÷aþò ïîðaçðяäíûé ñäâèã êaæäî- ãî ýëåìåíòa (òî åñòü íå ñäâèã ýëåìåíòîâ è íå ââîä/âûâîä).
Ïðèìåðû:
v4 += 1; // Ðåçóëüòaò — 5,5,4,7,2 (v4 îïèñaí âûøå) v2 += v3; // v2[i] = v2[i] + v3[i] äëяi= 1, …, 100 v4 >>= 1; // Ðåçóëüòaò — 2,2,2,3,1
 êëaññå valarray îïðåäåëåíû ñëåäóþùèå ìåòîäû:
size_t size() COnst; // Ðaçìåð ìaññèâa T sum() COnst; // Cóììa ýëåìåíòîâ
T min() COnst; // Íaèìåíüøåå çía÷åíèå T max() COnst; // Íaèáîëüøåå çía÷åíèå
// Ëîãè÷åñêèé ñäâèã ía i ýëåìåíòîâ (âëåâî, åñëè i>0): valarray shift(int i) COnst;
// Öèêëè÷åñêèé ñäâèã ía i ýëåìåíòîâ (âëåâî, åñëè i>0): valarray Cshift(int) COnst;
// Ïðèìåíåíèå ôóíêöèè funC ê êazäîìó ýëåìåíòó ìaññèâa: valarray apply(T funC(T)) COnst;
valarray apply(T funC(COnst T&)) COnst;
// ïîâòîðíaя èíèöèaëèçaöèя (âñå ýëåìåíòû çaìåíяþòñя ía
// çía÷åíèå ïî óìîë÷aíèþ, ðaçìåð âåêòîða — sz: vOid resize(size_t sz,TC= T());


1 Ïîяñíåíèя äåéñòâèя ýòèõ îïåðaöèé äaíû â ñëåäóþùåì ðaçäåëå.

Ôóíêöèè ñäâèãa shift è Cshift è ïðèìåíåíèå ôóíêöèè apply âîçâðaùaþò íîâûé ìaññèâ, ïðè ýòîì èñõîäíûé îñòaåòñя áåç èçìåíåíèé. Ïðè ëîãè÷åñêîì ñäâèãå îñâî- áîäèâøèåñя çía÷åíèя çaïîëíяþòñя çía÷åíèåì ïî óìîë÷aíèþ äëя äaííîãî òèïa ýëåìåíòîâ.


Ïîâòîðíaя èíèöèaëèçaöèя ñ ïîìîùüþ resize íå ïðåäíaçía÷åía äëя òîãî, ÷òîáû äèíaìè÷åñêè èçìåíяòü ðaçìåð ñóùåñòâóþùåãî ìaññèâa. Ïðåäïîëaãaåòñя, ÷òî valarray èñïîëüçóåòñя äëя áûñòðîé ðaáîòû ñ ÷èñëaìè è åãî ðaçìåð îñòaåòñя ïî- ñòîяííûì â òå÷åíèå âñåãî âðåìåíè åãî èñïîëüçîâaíèя.
Ê ìaññèâaì ìîæíî ïðèìåíяòü ôóíêöèè abs, aCOs, asin, atan, atan2, COs, COsh, exp, lOg, lOg10, pOw, sin, sinh, sqrt, tan, tanh, íaïðèìåð:
v2 = COs(v3); // v2[i] = COs(v3[i]) äëяi= 1, …, 100
Ïîñêîëüêó ýëåìåíòû ìaññèâa valarray ïðåäñòaâëяþò ñîáîé ïîñëåäîâaòåëüíîñòü, ê íåìó ïðèìåíèìû âñå ñòaíäaðòíûå aëãîðèòìû è èòåðaòîðû, ðaññìîòðåííûå â ïðåäûäóùèõ ðaçäåëaõ. Íî áîëåå ýôôåêòèâíî ðaáîòaòü ñ ìaññèâîì ÷åðåç ñðåçû è ïîäìíîæåñòâa, ðaññìaòðèâaåìûå â ñëåäóþùåì ðaçäåëå.
Äëя valarray îïðåäåëåíû ëîãè÷åñnèå îïåðaöèè <, >, ==, != è ò. ä., äaþùèå â ðåçóëü- òaòå ìaññèâ òèïa bOOl, êaæäûé ýëåìåíò êîòîðîãî ðaâåí ðåçóëüòaòó îïåðaöèè, ïðè- ìåíåííîé ê ïaðå ñîîòâåòñòâóþùèõ ýëåìåíòîâ ñðaâíèâaåìûõ ìaññèâîâ, íaïðèìåð:
template valarray
OperatOr== (COnst valarray&, COnst valarray&); template valarray
OperatOr!= (COnst valarray&, COnst valarray&);
Åñëè ðaçìåðû ìaññèâîâ, ó÷añòâóþùèõ â îïåðaöèè, íå ñîâïaäaþò, ðåçóëüòaò íå îïðåäåëåí.



Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   214   215   216   217   218   219   220   221   ...   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