Äëя ýôôåêòèâíîé ð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ò íå îïðåäåëåí.
Do'stlaringiz bilan baham: |