1 | <html> |
---|
2 | <head> |
---|
3 | <title>Áèáëèîòåêà AP äëÿ C++</title> |
---|
4 | <style type="text/css"> |
---|
5 | <!-- |
---|
6 | h1 { font-family: Tahoma,sans-serif; font-size : larger; } |
---|
7 | h2 { font-family: Arial,sans-serif; font-size : 11pt; } |
---|
8 | h3 { font-family: Arial,sans-serif; font-size : 9pt; } |
---|
9 | .cond { color:blue; } |
---|
10 | .const { color:#222222; } |
---|
11 | .func { color:#111111; } |
---|
12 | --> |
---|
13 | </style> |
---|
14 | </head> |
---|
15 | <body> |
---|
16 | |
---|
17 | <h1>Áèáëèîòåêà AP äëÿ C++</h1> |
---|
18 | |
---|
19 | <p align=justify> |
---|
20 | Ýòîò äîêóìåíò îïèñûâàåò áèáëèîòåêó AP, àäàïòèðîâàííóþ äëÿ ÿçûêà C++. Áèáëèîòåêà AP äëÿ Ñ++ ñîäåðæèò áàçîâûé íàáîð ìàòåìàòè÷åñêèõ ôóíêöèé è êëàññû-êîëëåêöèè, êîòîðûå òðåáóþòñÿ äëÿ ðàáîòû ïðîãðàìì ñ ñàéòà <a href="http://alglib.manual.ru/">"Áèáëèîòåêà àëãîðèòìîâ"</a>. |
---|
21 | </p> |
---|
22 | |
---|
23 | <h1>Ñîâìåñòèìîñòü</h1> |
---|
24 | |
---|
25 | <p align=justify> |
---|
26 | Äàííàÿ áèáëèîòåêà äîëæíà áûòü ñîâìåñòèìà ñ ëþáûì êîìïèëÿòîðîì Ñ++. |
---|
27 | </p> |
---|
28 | |
---|
29 | <h1>Ñîñòàâ è èñïîëüçîâàíèå</h1> |
---|
30 | |
---|
31 | <p align=justify> |
---|
32 |  ñîñòàâ áèáëèîòåêè âõîäÿò ôàéëû <code>ap.h</code> è <code>ap.cpp</code>. Äëÿ íà÷àëà ðàáîòû äîñòàòî÷íî ïîäêëþ÷èòü ôàéë <code>ap.cpp</code> ê ïðîåêòó. |
---|
33 | </p> |
---|
34 | |
---|
35 | <!--<p align=justify> |
---|
36 | <b>ÂÀÆÍÎ:</b> ìîäóëü <code>ap.cpp</code> íå ñîäåðæèò äèðåêòèâ äëÿ óïðàâëåíèÿ ïðåäâàðèòåëüíî îòêîìïèëèðîâàííûìè çàãîëîâêàìè (precompiled headers).  íåêîòîðûõ ñëó÷àÿõ ýòî ïðèâîäèò ê îøèáêå ïðè êîìïèëÿöèè. Îòêëþ÷èòå èñïîëüçîâàíèå ïðåäâàðèòåëüíî îòêîìïèëèðîâàííûõ çàãîëîâêîâ äëÿ ýòîãî ìîäóëÿ â íàñòðîéêàõ âàøåãî ïðîåêòà èëè äîáàâüòå â íà÷àëî ìîäóëÿ ñîîòâåòñòâóþùóþ äèðåêòèâó êîìïèëÿòîðà. Ñïèñîê äèðåêòèâ äëÿ íàèáîëåå ïîïóëÿðíûõ êîìïèëÿòîðîâ ïðèâåäåí íèæå. |
---|
37 | </p> |
---|
38 | |
---|
39 | <ul> |
---|
40 | <li><b>MS Visual Studo:</b> <code>#include "stdafx.h"</code></li> |
---|
41 | <li><b>Borland C++ Builder:</b> <code>#pragma hdrstop</code></li> |
---|
42 | </ul>--> |
---|
43 | |
---|
44 | <h1>Îïèñàíèå áèáëèîòåêè AP</h1> |
---|
45 | |
---|
46 | <font size=-1> |
---|
47 | <a href="#intro">Ââåäåíèå</a><br> |
---|
48 | <a href="#conditionals">Íàñòðîéêè óñëîâíîé êîìïèëÿöèè</a><br> |
---|
49 | <a href="#constants">Êîíñòàíòû</a><br> |
---|
50 | <a href="#functions">Ôóíêöèè</a><br> |
---|
51 | <a href="#aperror">Êëàññ ap_error</a><br> |
---|
52 | <a href="#arrays">Êëàññû ìàññèâîâ</a><br> |
---|
53 | <a href="#blas">Áàçîâûå ïîäïðîãðàììû ëèíåéíîé àëãåáðû</a><br> |
---|
54 | <a href="#complex">Êëàññ êîìïëåêñíûõ ÷èñåë</a><br> |
---|
55 | </font> |
---|
56 | |
---|
57 | <a name="intro"><h1>Ââåäåíèå</h1></a> |
---|
58 | |
---|
59 | <p align=justify> |
---|
60 |  çàãîëîâî÷íîì ôàéëå <code>ap.h</code> îïðåäåëÿåòñÿ ïðîñòðàíñòâî èìåí <code>ap</code>. Ñëåäóåò ó÷èòûâàòü, ÷òî èìåíà ôóíêöèé, êîíñòàíò è êëàññîâ, ïðèâåäåííûå äàëüøå, ñëåäóåò ïðåäâàðÿòü ïðåôèêñîì <i>ap::</i> |
---|
61 | </p> |
---|
62 | |
---|
63 | <a name="conditionals"><h1>Íàñòðîéêè óñëîâíîé êîìïèëÿöèè</h1></a> |
---|
64 | |
---|
65 | <p align=justify> |
---|
66 | <span class=cond>AP_ASSERT</span><br> |
---|
67 | Ýòîò ñèìâîë âêëþ÷àåò ïðîâåðêó ãðàíèö ìàññèâà. Åñëè îí îïðåäåëåí äèðåêòèâîé define, òî ïðè êàæäîì îáðàùåíèè ê ýëåìåíòàì äèíàìè÷åñêîãî ìàññèâà ïðîâåðÿåòñÿ ïðàâèëüíîñòü ïåðåäàííîãî èíäåêñà.  ñëó÷àå îøèáêè ãåíåðèðóåòñÿ èñêëþ÷åíèå <code>ap_error</code>. Ïðîâåðêà ãðàíèö ìàññèâà äåëàåò ïðîãðàììó áîëåå íàäåæíîé, íî çàìåäëÿåò ðàáîòó. |
---|
68 | </p> |
---|
69 | |
---|
70 | <p align=justify> |
---|
71 | <span class=cond>NO_AP_ASSERT</span><br> |
---|
72 | Ýòîò ñèìâîë îòêëþ÷àåò ïðîâåðêó ãðàíèö ìàññèâà. Åñëè îí îïðåäåëåí äèðåêòèâîé define, òî ïðè îáðàùåíèè ê ýëåìåíòó äèíàìè÷åñêîãî ìàññèâà âûõîä èíäåêñà çà ãðàíèöû ìàññèâà íå ïðîâåðÿåòñÿ. |
---|
73 | </p> |
---|
74 | |
---|
75 | <p align=justify> |
---|
76 | <span class=cond>UNSAFE_MEM_COPY</span><br> |
---|
77 | Äèðåêòèâà define, îïðåäåëÿþùàÿ ýòîò ñèìâîë, îòêëþ÷åíà. Íå âêëþ÷àéòå åž. Áèáëèîòåêà íå ñîäåðæèò íèêàêîé äîêóìåíòàöèè ïî ïîâîäó ýòîãî ñèìâîëà. |
---|
78 | </p> |
---|
79 | |
---|
80 | <a name="constants"><h1>Êîíñòàíòû</h1></a> |
---|
81 | |
---|
82 | <p align=justify> |
---|
83 | <span class=const>machineepsilon</span><br> |
---|
84 | Ýòà êîíñòàíòà îïðåäåëÿåò òî÷íîñòü ìàøèííûõ îïåðàöèé, ò.å. ìèíèìàëüíîå ÷èñëî, òàêîå, ÷òî <code>1+machineepsilon≠1</code> íà äàííîé ðàçðÿäíîé ñåòêå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ òî÷íîñòü ìîæåò áûòü åùž âûøå. |
---|
85 | </p> |
---|
86 | |
---|
87 | <p align=justify> |
---|
88 | <span class=const>maxrealnumber</span><br> |
---|
89 | Ýòà êîíñòàíòà îïðåäåëÿåò ìàêñèìàëüíîå ïîëîæèòåëüíîå âåùåñòâåííîå ÷èñëî, ïðåäñòàâèìîå íà äàííîé ìàøèíå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ ãðàíèöà ìîæåò áûòü åùž âûøå. |
---|
90 | </p> |
---|
91 | |
---|
92 | <p align=justify> |
---|
93 | <span class=const>minrealnumber</span><br> |
---|
94 | Ýòà êîíñòàíòà îïðåäåëÿåò ìèíèìàëüíîå ïîëîæèòåëüíîå âåùåñòâåííîå ÷èñëî, ïðåäñòàâèìîå íà äàííîé ìàøèíå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ ãðàíèöà ìîæåò áûòü åùž íèæå. |
---|
95 | </p> |
---|
96 | |
---|
97 | <a name="functions"><h1>Ôóíêöèè</h1></a> |
---|
98 | |
---|
99 | <p align=justify> |
---|
100 | <span class=func><b>int</b> sign(<b>double</b> x)</span><br> |
---|
101 | Âîçâðàùàåò:<br> |
---|
102 | +1, åñëè X>0<br> |
---|
103 | -1, åñëè X<0<br> |
---|
104 | 0, åñëè X=0 |
---|
105 | </p> |
---|
106 | |
---|
107 | <p align=justify> |
---|
108 | <span class=func><b>double</b> randomreal()</span><br> |
---|
109 | Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå ÷èñëî â ïîëóèíòåðâàëå [0,1). |
---|
110 | </p> |
---|
111 | |
---|
112 | <p align=justify> |
---|
113 | <span class=func><b>int</b> randominteger(<b>int</b> maxv) </span><br> |
---|
114 | Âîçâðàùàåò ñëó÷àéíîå öåëîå ÷èñëî â ïîëóèíòåðâàëå [0, maxv). |
---|
115 | </p> |
---|
116 | |
---|
117 | <p align=justify> |
---|
118 | <span class=func><b>double</b> round(<b>double</b> x)</span><br> |
---|
119 | Îêðóãëåíèå ê áëèæàéøåìó öåëîìó. Åñëè X íàõîäèòñÿ òî÷íî ïîñåðåäèíå ìåæäó äâóìÿ öåëûìè, òî ðåçóëüòàò ôóíêöèè çàâèñèò îò ðåàëèçàöèè. |
---|
120 | </p> |
---|
121 | |
---|
122 | <p align=justify> |
---|
123 | <span class=func><b>double</b> trunc(<b>double</b> x)</span><br> |
---|
124 | Îòáðàñûâàíèå äðîáíîé ÷àñòè X.<br> |
---|
125 | trunc(1.3) = 1<br> |
---|
126 | trunc(-1.3)= -1 |
---|
127 | </p> |
---|
128 | |
---|
129 | <p align=justify> |
---|
130 | <span class=func><b>double</b> pi()</span><br> |
---|
131 | Âîçâðàùàåò êîíñòàíòó π |
---|
132 | </p> |
---|
133 | |
---|
134 | <p align=justify> |
---|
135 | <span class=func><b>double</b> sqr(<b>double</b> x)</span><br> |
---|
136 | Âîçâðàùàåò x<sup>2</sup> |
---|
137 | </p> |
---|
138 | |
---|
139 | <p align=justify> |
---|
140 | <span class=func><b>double</b> maxreal(<b>double</b> m1, <b>double</b> m2)</span><br> |
---|
141 | Âîçâðàùàåò ìàêñèìóì èç äâóõ âåùåñòâåííûõ ÷èñåë. |
---|
142 | </p> |
---|
143 | |
---|
144 | <p align=justify> |
---|
145 | <span class=func><b>double</b> minreal(<b>double</b> m1, <b>double</b> m2)</span><br> |
---|
146 | Âîçâðàùàåò ìèíèìóì èç äâóõ âåùåñòâåííûõ ÷èñåë. |
---|
147 | </p> |
---|
148 | |
---|
149 | <p align=justify> |
---|
150 | <span class=func><b>int</b> maxint(<b>int</b> m1, <b>int</b> m2)</span><br> |
---|
151 | Âîçâðàùàåò ìàêñèìóì èç äâóõ öåëûõ ÷èñåë. |
---|
152 | </p> |
---|
153 | |
---|
154 | <p align=justify> |
---|
155 | <span class=func><b>int</b> minint(<b>int</b> m1, <b>int</b> m2)</span><br> |
---|
156 | Âîçâðàùàåò ìèíèìóì èç äâóõ öåëûõ ÷èñåë. |
---|
157 | </p> |
---|
158 | |
---|
159 | <a name="aperror"><h1>Êëàññ ap_error</h1></a> |
---|
160 | |
---|
161 | <p align=justify> |
---|
162 | Ýòî êëàññ èñêëþ÷åíèÿ, êîòîðîå âûáðàñûâàåòñÿ ïðè ðàçëè÷íûõ îøèáêàõ áèáëèîòåêè AP, â ÷àñòíîñòè - ïðè íåâåðíîì óêàçàíèè èíäåêñà ìàññèâà, åñëè âêëþ÷åíà ïðîâåðêà ãðàíèö ìàññèâà. Òåêóùàÿ âåðñèÿ êëàññà íå ñîäåðæèò íèêàêèõ ïîëåé è íå ïîçâîëÿåò îïðåäåëèòü ïðè÷èíó, ïî êîòîðîé èñêëþ÷åíèå áûëî ñãåíåðèðîâàíî. |
---|
163 | </p> |
---|
164 | |
---|
165 | <a name="arrays"><h1>Êëàññû ìàññèâîâ</h1></a> |
---|
166 | |
---|
167 | <h2>Ðàáîòà ñ ìàññèâàìè</h2> |
---|
168 | |
---|
169 | <p align=justify> |
---|
170 | Çäåñü ìû ðàññìîòðèì îáùèå ïðèíöèïû ðàáîòû ñ êëàññàìè-ìàññèâàìè, ïîñëå ÷åãî áóäóò ðàññìîòðåíû ñàìè êëàññû è èõ ìåòîäû. |
---|
171 | </p> |
---|
172 | |
---|
173 | <p align=justify> |
---|
174 | Êëàññû, âõîäÿùèå â ñîñòàâ ñòàíäàðòíîé áèáëèîòåêè, ïîçâîëÿþò îïåðèðîâàòü ñ ìàòðèöàìè è âåêòîðàìè (îäíîìåðíûìè è äâóõìåðíûìè ìàññèâàìè) ïåðåìåííîãî ðàçìåðà, ñ ïåðåìåííîé íóìåðàöèåé ýëåìåíòîâ, ò.å. íóìåðàöèÿ ìîæåò íà÷èíàòüñÿ ñ ëþáîãî ÷èñëà, çàêàí÷èâàòüñÿ ëþáûì ÷èñëîì è äèíàìè÷åñêè ìåíÿòüñÿ. Òàê êàê êëàññû ìàññèâîâ ÿâëÿþòñÿ øàáëîíàìè, òî ìàññèâû îäíîé ðàçìåðíîñòè îáëàäàþò îäèíàêîâûì íàáîðîì ôóíêöèé-÷ëåíîâ. À ïîñêîëüêó ôóíêöèè-÷ëåíû ìàññèâîâ ðàçíûõ ðàçìåðíîñòåé îòëè÷àþòñÿ òîëüêî êîëè÷åñòâîì àðãóìåíòîâ, òî äâóìåðíûå è îäíîìåðíûå ìàññèâû ìàëî ÷åì îòëè÷àþòñÿ äðóã îò äðóãà. |
---|
175 | </p> |
---|
176 | |
---|
177 | <p align=justify> |
---|
178 | Ðàáîòà ñ ìàññèâîì íà÷èíàåòñÿ ñ ñîçäàíèÿ ìàññèâà. Ñëåäóåò ðàçëè÷àòü ñîçäàíèå ýêçåìïëÿðà êëàññà-ìàññèâà è âûäåëåíèå ïàìÿòè ïîä ìàññèâ. Ïðè ñîçäàíèè ýêçåìïëÿðà êëàññà ìîæåò èñïîëüçîâàòüñÿ êîíñòðóêòîð áåç ïàðàìåòðîâ, ñîçäàþùèé ìàññèâ áåç ýëåìåíòîâ, à ìîãóò èñïîëüçîâàòüñÿ êîíñòðóêòîðû êîïèé è ïðèñâàèâàíèÿ, êîïèðóþùèå îäèí ìàññèâ â äðóãîé.  ñëó÷àå ñîçäàíèÿ ìàññèâà êîíñòðóêòîðîì ïî óìîë÷àíèþ îí íå ñîäåðæèò ýëåìåíòîâ è ïîïûòêà îáðàòèòüñÿ ê íèì ìîæåò ïðèâåñòè ê êðàõó ïðîãðàììû. Åñëè ïðè êîïèðîâàíèè ìàññèâ-èñòî÷íèê íå èìååò âûäåëåííîé ïàìÿòè ïîä ýëåìåíòû, òî ìàññèâ-êîïèÿ òîæå íå áóäåò ñîäåðæàòü ýëåìåíòîâ. Åñëè ìàññèâ-èñòî÷íèê èìååò âûäåëåííóþ ïîä ýëåìåíòû ïàìÿòü, òî ìàññèâ-êîïèÿ âûäåëÿåò òîò æå îáúåì ïàìÿòè è êîïèðóåò â íåž ýëåìåíòû. Ò.å. ïðè êîïèðîâàíèè ïîëó÷àþòñÿ äâà ïîëíîñòüþ íåçàâèñèìûõ ìàññèâà ñ îäèíàêîâûì ñîäåðæèìûì. |
---|
179 | </p> |
---|
180 | |
---|
181 | <p align=justify> |
---|
182 | Ïîñëå ñîçäàíèÿ ïóñòîãî ìàññèâà ñëåäóåò âûäåëèòü ïàìÿòü ïîä ýëåìåíòû ïðè ïîìîùè ìåòîäà <code:>setbounds</code:>. Ïàðàìåòðû ìåòîäà çàäàþò âåðõíèå è íèæíèå ãðàíèöû èíäåêñîâ ìàññèâà. Âåðõíÿÿ ãðàíèöà äîëæíà áûòü íå ìåíüøå íèæíåé.  ðåçóëüòàòå âûçîâà â ïàìÿòè âûäåëÿåòñÿ ìåñòî äëÿ ýëåìåíòîâ. Ñîäåðæèìîå ñîçäàííûõ ýëåìåíòîâ ìàññèâà íå îïðåäåëåíî è íå ñòîèò äåëàòü êàêèå ëèáî ïðåäïîëîæåíèÿ ïî ýòîìó ïîâîäó. Åñëè ìåòîä <code:>setbounds</code:> âûçûâàåòñÿ äëÿ ìàññèâà ñ óæå âûäåëåííîé ïàìÿòüþ, òî ïîñëå èçìåíåíèÿ åãî ðàçìåðîâ âíîâü âûäåëåííûå ýëåìåíòû òàêæå ñòàíîâèòñÿ íåîïðåäåëåííûìè, à ñòàðîå ñîäåðæèìîå èñ÷åçàåò. |
---|
183 | </p> |
---|
184 | |
---|
185 | <p align=justify> |
---|
186 | Äëÿ îáðàùåíèÿ ê ýëåìåíòàì ìàññèâà èñïîëüçóåòñÿ ïåðåãðóæåííûé <code:>operator()</code:>. Ò.å. êîä, îáðàùàþùèéñÿ ê ýëåìåíòó ìàññèâà <code:>a</code:> ñ èíäåêñàìè <code:>i, j, k</code:> áóäåò âûãëÿäåòü êàê <code:>a(i,j,k)</code:>. Íèæå ïðèâåäåí ïðèìåð âû÷èñëåíèÿ ìàññèâà ôàêòîðèàëîâ, èëëþñòðèðóþùèé ðàáîòó ñ ìàññèâàìè. |
---|
187 | </p> |
---|
188 | |
---|
189 | <pre> |
---|
190 | integer_1d_array factarr(<b>int</b> n) |
---|
191 | { |
---|
192 | integer_1d_array result; |
---|
193 | result.setbounds(1,n); |
---|
194 | result(1) = 1; |
---|
195 | <b>for</b>(<b>int</b> i=2; i<=n; i++) |
---|
196 | result(i) = result(i-1)*i; |
---|
197 | <b>return</b> result; |
---|
198 | } |
---|
199 | </pre> |
---|
200 | |
---|
201 | <h2>Êëàññ template_1d_array</h2> |
---|
202 | |
---|
203 | <p align=justify> |
---|
204 | Ýòî êëàññ-øàáëîí äèíàìè÷åñêîãî îäíîìåðíîãî ìàññèâà ñ ïåðåìåííûìè âåðõíåé è íèæíåé ãðàíèöàìè. Íà îñíîâå ýòîãî êëàññà ïîëó÷åíû ñëåäóþùèå êëàññû: |
---|
205 | </p> |
---|
206 | |
---|
207 | <pre> |
---|
208 | <b>typedef</b> template_1d_array<<b>int</b>> integer_1d_array; |
---|
209 | <b>typedef</b> template_1d_array<<b>double</b>> real_1d_array; |
---|
210 | <b>typedef</b> template_1d_array<<b>bool</b>> boolean_1d_array; |
---|
211 | <b>typedef</b> template_1d_array<complex> complex_1d_array; |
---|
212 | </pre> |
---|
213 | |
---|
214 | <h2>Ôóíêöèè-÷ëåíû êëàññà</h2> |
---|
215 | |
---|
216 | <p align=justify> |
---|
217 | <span class=func>template_1d_array()</span><br> |
---|
218 | Êîíñòðóêòîð. Ñîçäàíèå ïóñòîãî ìàññèâà. |
---|
219 | </p> |
---|
220 | |
---|
221 | <p align=justify> |
---|
222 | <span class=func>~template_1d_array()</span><br> |
---|
223 | Äåñòðóêòîð. Ïðè âûçîâå îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä ìàññèâ ïàìÿòü |
---|
224 | </p> |
---|
225 | |
---|
226 | <p align=justify> |
---|
227 | <span class=func>template_1d_array(<b>const</b> template_1d_array &rhs)</span><br> |
---|
228 | Êîíñòðóêòîð êîïèé ìàññèâà. Ïðè ýòîì âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà. |
---|
229 | </p> |
---|
230 | |
---|
231 | <p align=justify> |
---|
232 | <span class=func><b>const</b> template_1d_array& <b>operator=</b>(<b>const</b> template_1d_array &rhs)</span><br> |
---|
233 | Ïðèñâàèâàíèå ìàññèâà. Ïðè ýòîì ñîäåðæèìîå ìàññèâà-ïðèåìíèêà óäàëÿåòñÿ è îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà. |
---|
234 | </p> |
---|
235 | |
---|
236 | <p align=justify> |
---|
237 | <span class=func>T& operator()(<b>int</b> i)</span><br> |
---|
238 | Îáðàùåíèå ê ýëåìåíòó ìàññèâà ñ íîìåðîì i |
---|
239 | </p> |
---|
240 | |
---|
241 | <p align=justify> |
---|
242 | <span class=func><b>void</b> setbounds(<b>int</b> iLow, <b>int</b> iHigh)</span><br> |
---|
243 | Âûäåëåíèå ïàìÿòè ïîä ìàññèâ. Ïðè ýòîì ñòàðîå ñîäåðæèìîå ìàññèâà óäàëÿåòñÿ è îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè ðàçìåðà iHigh-iLow+1 ýëåìåíòîâ.<br> |
---|
244 | Íóìåðàöèÿ ýëåìåíòîâ â íîâîì ìàññèâà íà÷èíàåòñÿ ñ iLow è çàêàí÷èâàåòñÿ iHigh. Ñîäåðæèìîå íîâîãî ìàññèâà íå îïðåäåëåíî. |
---|
245 | </p> |
---|
246 | |
---|
247 | <p align=justify> |
---|
248 | <span class=func><b>void</b> setcontent(<b>int</b> iLow, <b>int</b> iHigh, <b>const</b> T *pContent)</span><br> |
---|
249 | Ìåòîä àíàëîãè÷åí ìåòîäó setbounds() çà òåì èñêëþ÷åíèåì, ÷òî ïîñëå âûäåëåíèÿ ïàìÿòè â íåž êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà pContent[]. |
---|
250 | </p> |
---|
251 | |
---|
252 | <p align=justify> |
---|
253 | <span class=func>T* getcontent()</span><br> |
---|
254 | Ìåòîä ïîçâîëÿåò ïîëó÷èòü óêàçàòåëü íà ñîäåðæèìîå ìàññèâà. Äàííûå, íà êîòîðûå óêàçûâàåò âîçâðàùåííûé óêàçàòåëü, ìîæíî èçìåíÿòü, è ïðè ýòîì èçìåíèòñÿ ñîäåðæèìîå ìàññèâà. |
---|
255 | </p> |
---|
256 | |
---|
257 | <p align=justify> |
---|
258 | <span class=func><b>int</b> getlowbound()<br><b>int</b> gethighbound()</span><br> |
---|
259 | Ìåòîäû èñïîëüçóþòñÿ äëÿ ïîëó÷åíèÿ èíôîðìàöèè î íèæíåé è âåðõíåé ãðàíèöàõ ìàññèâà. |
---|
260 | </p> |
---|
261 | |
---|
262 | <p align=justify> |
---|
263 | <span class=func>raw_vector<T> getvector(<b>int</b> iStart, <b>int</b> iEnd)</span><br> |
---|
264 | Ìåòîä èñïîëüçóåòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîä âîçâðàùàåò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü âåêòîðà (íà÷èíàÿ ñ ýëåìåíòà ñ èíäåêñîì iStart è çàêàí÷èâàÿ èíäåêñîì iEnd). Åñëè iEnd<iStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé âåêòîð. |
---|
265 | </p> |
---|
266 | |
---|
267 | <p align=justify> |
---|
268 | <span class=func>const_raw_vector<T> getvector(<b>int</b> iStart, <b>int</b> iEnd) <b>const</b></span><br> |
---|
269 | Ìåòîä èñïîëüçóåòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîä âîçâðàùàåò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü âåêòîðà (íà÷èíàÿ ñ ýëåìåíòà ñ èíäåêñîì iStart è çàêàí÷èâàÿ èíäåêñîì iEnd). Åñëè iEnd<iStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé âåêòîð. Âîçâðàùåííûé îáúåêò ïîçâîëÿåò ïîëó÷àòü äîñòóï òîëüêî äëÿ ÷òåíèÿ. |
---|
270 | </p> |
---|
271 | |
---|
272 | |
---|
273 | <h2>Êëàññ template_2d_array</h2> |
---|
274 | |
---|
275 | <p align=justify> |
---|
276 | Ýòî êëàññ-øàáëîí äèíàìè÷åñêîãî äâóõìåðíîãî ìàññèâà ñ ïåðåìåííûìè âåðõíåé è íèæíåé ãðàíèöàìè. Íà îñíîâå ýòîãî êëàññà ïîëó÷åíû ñëåäóþùèå êëàññû: |
---|
277 | </p> |
---|
278 | |
---|
279 | <pre> |
---|
280 | <b>typedef</b> template_2d_array<<b>int</b>> integer_2d_array; |
---|
281 | <b>typedef</b> template_2d_array<<b>double</b>> real_2d_array; |
---|
282 | <b>typedef</b> template_2d_array<<b>bool</b>> boolean_2d_array; |
---|
283 | <b>typedef</b> template_2d_array<complex> complex_2d_array; |
---|
284 | </pre> |
---|
285 | |
---|
286 | <h2>Ôóíêöèè-÷ëåíû êëàññà</h2> |
---|
287 | |
---|
288 | <p align=justify> |
---|
289 | <span class=func>template_2d_array()</span><br> |
---|
290 | Êîíñòðóêòîð. Ñîçäàíèå ïóñòîãî ìàññèâà. |
---|
291 | </p> |
---|
292 | |
---|
293 | <p align=justify> |
---|
294 | <span class=func>~template_2d_array()</span><br> |
---|
295 | Äåñòðóêòîð. Ïðè âûçîâå îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä ìàññèâ ïàìÿòü |
---|
296 | </p> |
---|
297 | |
---|
298 | <p align=justify> |
---|
299 | <span class=func>template_2d_array(<b>const</b> template_2d_array &rhs)</span><br> |
---|
300 | Êîíñòðóêòîð êîïèé ìàññèâà. Ïðè ýòîì âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà |
---|
301 | </p> |
---|
302 | |
---|
303 | <p align=justify> |
---|
304 | <span class=func><b>const</b> template_2d_array& <b>operator=</b>(<b>const</b> template_2d_array &rhs)</span><br> |
---|
305 | Ïðèñâàèâàíèå ìàññèâà. Ïðè ýòîì ñîäåðæèìîå ìàññèâà-ïðèåìíèêà óäàëÿåòñÿ è îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå èñòî÷íèêà. |
---|
306 | </p> |
---|
307 | |
---|
308 | <p align=justify> |
---|
309 | <span class=func>T& operator()(<b>int</b> i1, <b>int</b> i2)</span><br> |
---|
310 | Îáðàùåíèå ê ýëåìåíòó ìàññèâà ñ èíäåêñîì [i1,i2] |
---|
311 | </p> |
---|
312 | |
---|
313 | <p align=justify> |
---|
314 | <span class=func><b>void</b> setbounds(<b>int</b> iLow1, <b>int</b> iHigh1, <b>int</b> iLow2, <b>int</b> iHigh2)</span><br> |
---|
315 | Âûäåëåíèå ïàìÿòè ïîä ìàññèâ. Ïðè ýòîì ñòàðîå ñîäåðæèìîå ìàññèâà óäàëÿåòñÿ è îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè ðàçìåðîì (iHigh1-iLow1+1)*(iHigh2-iLow2+1) ýëåìåíòîâ.<br> |
---|
316 | Íóìåðàöèÿ ýëåìåíòîâ â íîâîì ìàññèâà ïî ïåðâîé ðàçìåðíîñòè íà÷èíàåòñÿ ñ iLow1 è çàêàí÷èâàåòñÿ iHigh1, àíàëîãè÷íî äëÿ âòîðîé ðàçìåðíîñòè.<br> |
---|
317 | Ñîäåðæèìîå íîâîãî ìàññèâà íå îïðåäåëåíî. |
---|
318 | </p> |
---|
319 | |
---|
320 | <p align=justify> |
---|
321 | <span class=func><b>void</b> setcontent(<b>int</b> iLow1, <b>int</b> iHigh1, <b>int</b> iLow2, <b>int</b> iHigh2, <b>const</b> T *pContent)</span><br> |
---|
322 | Ìåòîä àíàëîãè÷åí ìåòîäó setbounds() çà òåì èñêëþ÷åíèåì, ÷òî ïîñëå âûäåëåíèÿ ïàìÿòè â íåž êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà pContent[].<br> |
---|
323 | Ìàññèâ pContent ñîäåðæèò äâóõìåðíûé ìàññèâ, çàïèñàííûé ïîñòðî÷íî, ò.å. ïåðâûì èäåò ýëåìåíò [iLow1, iLow2], çàòåì [iLow1, iLow2+1] è ò.ä.<br> |
---|
324 | </p> |
---|
325 | |
---|
326 | <p align=justify> |
---|
327 | <span class=func>T* getcontent()</span><br> |
---|
328 | Ìåòîä ïîçâîëÿåò ïîëó÷èòü óêàçàòåëü íà ñîäåðæèìîå ìàññèâà. Äàííûå, íà êîòîðûå óêàçûâàåò âîçâðàùåííûé óêàçàòåëü, ìîæíî èçìåíÿòü, è ïðè ýòîì èçìåíèòñÿ ñîäåðæèìîå ìàññèâà. |
---|
329 | </p> |
---|
330 | |
---|
331 | <p align=justify> |
---|
332 | <span class=func><b>int</b> getlowbound(<b>int</b> iBoundNum)<br><b>int</b> gethighbound(<b>int</b> iBoundNum)</span><br> |
---|
333 | Ìåòîäû èñïîëüçóþòñÿ äëÿ ïîëó÷åíèÿ èíôîðìàöèè î íèæíåé è âåðõíåé ãðàíèöàõ ìàññèâà ïî ðàçìåðíîñòè ñ ïåðåäàííûì íîìåðîì. |
---|
334 | </p> |
---|
335 | |
---|
336 | <p align=justify> |
---|
337 | <span class=func> |
---|
338 | raw_vector<T> getcolumn(<b>int</b> iColumn, <b>int</b> iRowStart, <b>int</b> iRowEnd)<br> |
---|
339 | const_raw_vector<T> getcolumn(<b>int</b> iColumn, <b>int</b> iRowStart, <b>int</b> iRowEnd) <b>const</b><br> |
---|
340 | </span> |
---|
341 | Ìåòîäû èñïîëüçóþòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîäû âîçâðàùàþò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü ñòîëáöà iColumn (íà÷èíàÿ ñî ñòðîêè iRowStart è çàêàí÷èâàÿ ñòðîêîé iRowEnd). |
---|
342 | <br> |
---|
343 | Ïàðàìåòð iColumn äîëæåí áûòü äîïóñòèìûì íîìåðîì ñòîëáöà (ò.å. íàõîäèòüñÿ â ïðåäåëàõ âûäåëåííîé ïîä ìàññèâ ïàìÿòè). Åñëè iRowEnd<iRowStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé ñòîëáåö. |
---|
344 | </p> |
---|
345 | |
---|
346 | <p align=justify> |
---|
347 | <span class=func> |
---|
348 | raw_vector<T> getrow(<b>int</b> iRow, <b>int</b> iColumnStart, <b>int</b> iColumnEnd)<br> |
---|
349 | const_raw_vector<T> getrow(<b>int</b> iRow, <b>int</b> iColumnStart, <b>int</b> iColumnEnd) <b>const</b><br> |
---|
350 | </span> |
---|
351 | Ìåòîäû èñïîëüçóþòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîäû âîçâðàùàþò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü ñòðîêè iRow (íà÷èíàÿ ñî ñòîëáöà iColumnStart è çàêàí÷èâàÿ ñòîëáöîì iColumnEnd). |
---|
352 | <br> |
---|
353 | Ïàðàìåòð iRow äîëæåí áûòü äîïóñòèìûì íîìåðîì ñòðîêè (ò.å. íàõîäèòüñÿ â ïðåäåëàõ âûäåëåííîé ïîä ìàññèâ ïàìÿòè). Åñëè iColumnEnd<iColumnStart, òî ñ÷èòàåòñÿ, ÷òî çàäàíà ïóñòàÿ ñòðîêà. |
---|
354 | </p> |
---|
355 | |
---|
356 | <a name="blas"><h1>Áàçîâûå ïîäïðîãðàììû ëèíåéíîé àëãåáðû</h1></a> |
---|
357 | |
---|
358 | <p align=justify> |
---|
359 | Áàçîâûå ïîäïðîãðàììû ëèíåéíîé àëãåáðû áèáëèîòåêè AP ïî ñâîåé ôóíêöèîíàëüíîñòè áëèçêè ê Level 1 BLAS, ïîçâîëÿÿ îñóùåñòâëÿòü ïðîñòåéøèå îïåðàöèè ñ âåêòîðàìè, à òàêæå ñî ñòðîêàìè è ñòîëáöàìè ìàòðèö. |
---|
360 | </p> |
---|
361 | |
---|
362 | <p align=justify> |
---|
363 | Ðàáîòà ñ ïîäïðîãðàììàìè îñóùåñòâëÿåòñÿ ñëåäóþùèì îáðàçîì. Ñíà÷àëà íåîáõîäèìî ïîëó÷èòü îáúåêò òèïà <code>raw_vector</code> èëè <code>const_raw_vector</code>, óêàçûâàþùèé íà îáðàáàòûâàåìóþ ÷àñòü ìàòðèöû èëè ìàññèâà ïðè ïîìîùè ìåòîäîâ <code>getcolumn</code>/<code>getrow</code> (äëÿ ìàòðèöû) èëè <code>getvector</code> (äëÿ ìàññèâà). Îáúåêò ñîäåðæèò â ñåáå óêàçàòåëü íà íà÷àëî ñòðîêè (èëè ñòîëáöà), ÷èñëî ýëåìåíòîâ â îáðàáàòûâàåìîé ñòðîêå è èíòåðâàë ìåæäó äâóìÿ ñîñåäíèìè ýëåìåíòàìè. Ïðè èñïîëüçîâàíèè ñòàíäàðòíîé ñõåìû õðàíåíèÿ ìàòðèö â ïàìÿòè (ò.å. ïðè õðàíåíèè ïî ñòðîêàì) èíòåðâàë ìåæäó ýëåìåíòàìè îäíîé ñòðîêè ðàâåí 1, à èíòåðâàë ìåæäó ýëåìåíòàìè îäíîãî ñòîëáöà ðàâåí ÷èñëó ñòîëáöîâ. |
---|
364 | </p> |
---|
365 | |
---|
366 | <p align=justify> |
---|
367 | Ïîëó÷åííûé îáúåêò ïåðåäàåòñÿ â êà÷åñòâå àðãóìåíòà â ñîîòâåòñâóþùóþ ïîäïðîãðàììó, êîòîðàÿ îñóùåñòâëÿåò îïåðàöèè íàä ÷àñòüþ ìàòðèöû, íà êîòîðóþ óêàçûâàåò âíóòðåííèé óêàçàòåëü îáúåêòà. Íèæå ïðèâåäåí ñïèñîê áàçîâûõ ïîäïðîãðàìì ëèíåéíîé àëãåáðû, äîñòóïíûõ â ñîñòàâå áèáëèîòåêè AP. |
---|
368 | </p> |
---|
369 | |
---|
370 | <p align=justify> |
---|
371 | <span class=func> |
---|
372 | template<<b>class</b> T> T vdotproduct(const_raw_vector<T> v1, const_raw_vector<T> v2) |
---|
373 | </span><br> |
---|
374 | Ïîäïðîãðàììà âû÷èñëÿåò ñêàëÿðíîå ïðîèçâåäåíèå ïåðåäàííûõ âåêòîðîâ. |
---|
375 | </p> |
---|
376 | |
---|
377 | <p align=justify> |
---|
378 | <span class=func> |
---|
379 | template<<b>class</b> T> <b>void</b> vmove(raw_vector<T> vdst, const_raw_vector<T> vsrc)<br> |
---|
380 | template<<b>class</b> T> <b>void</b> vmoveneg(raw_vector<T> vdst, const_raw_vector<T> vsrc)<br> |
---|
381 | template<<b>class</b> T, <b>class</b> T2> <b>void</b> vmove(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)<br> |
---|
382 | </span> |
---|
383 | Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ êîïèðîâàíèÿ ñîäåðæèìîãî îäíîãî âåêòîðà íà ìåñòî äðóãîãî âåêòîðà: ïðîñòîãî êîïèðîâàíèÿ, êîïèðîâàíèÿ ñ óìíîæåíèåì íà -1, êîïèðîâàíèÿ ñ óìíîæåíèåì íà ÷èñëî. |
---|
384 | </p> |
---|
385 | |
---|
386 | <p align=justify> |
---|
387 | <span class=func> |
---|
388 | template<<b>class</b> T> <b>void</b> vadd(raw_vector<T> vdst, const_raw_vector<T> vsrc)<br> |
---|
389 | template<<b>class</b> T, <b>class</b> T2> <b>void</b> vadd(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)<br> |
---|
390 | </span> |
---|
391 | Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ äîáàâëåíèÿ îäíîãî âåêòîðà ê äðóãîìó: ïðîñòîãî äîáàâëåíèÿ èëè äîáàâëåíèÿ ñ óìíîæåíèåì íà ÷èñëî. |
---|
392 | </p> |
---|
393 | |
---|
394 | <p align=justify> |
---|
395 | <span class=func> |
---|
396 | template<<b>class</b> T> <b>void</b> vsub(raw_vector<T> vdst, const_raw_vector<T> vsrc)<br> |
---|
397 | template<<b>class</b> T, <b>class</b> T2> <b>void</b> vsub(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)<br> |
---|
398 | </span> |
---|
399 | Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ âû÷èòàíèÿ îäíîãî âåêòîðà èç äðóãîãî: ïðîñòîãî âû÷èòàíèÿ èëè âû÷èòàíèÿ ñ óìíîæåíèåì íà ÷èñëî. |
---|
400 | </p> |
---|
401 | |
---|
402 | <p align=justify> |
---|
403 | <span class=func> |
---|
404 | template<<b>class</b> T, <b>class</b> T2> <b>void</b> vmul(raw_vector<T> vdst, T2 alpha) |
---|
405 | </span><br> |
---|
406 | Ýòà ïîäïðîãðàììà ñëóæèò äëÿ óìíîæåíèÿ âåêòîðà íà ÷èñëî ñ ñîõðàíåíèåì ðåçóëüòàòà â òîì æå ìåñòå. |
---|
407 | </p> |
---|
408 | |
---|
409 | |
---|
410 | <a name="complex"><h1>Êëàññ êîìïëåêñíûõ ÷èñåë</h1></a> |
---|
411 | |
---|
412 | <p align=justify> |
---|
413 | Áèáëèîòåêà AP ñîäåðæèò êëàññ <code>ap::complex</code>, êîòîðûé ïîçâîëÿåò îñóùåñòâëÿòü îïåðàöèè ñ êîìïëåêñíûìè ÷èñëàìè. Äîñòóï ê äåéñòâèòåëüíîé è ìíèìîé ÷àñòÿì êîìïëåêñíîãî ÷èñëà îñóùåñòâëÿåòñÿ ÷åðåç îòêðûòûå (public) ïîëÿ <code>x</code> è <code>y</code>. Ïîääåðæèâàþòñÿ àðèôìåòè÷åñêèå îïåðàöèè, êàê ñî âñòðîåííûìè òèïàìè äàííûõ, ïóòåì ïåðåãðóçêè îïåðàöèé ñëîæåíèÿ, âû÷èòàíèÿ, óìíîæåíèÿ è äåëåíèÿ. Ñëîæåíèå, âû÷èòàíèå è óìíîæåíèå îñóùåñòâëÿþòñÿ îáû÷íûì ñïîñîáîì (ò.å. ïî îïðåäåëåíèþ, êîòîðîå ìîæíî íàéòè â ëþáîì ó÷åáíèêå àëãåáðû), îïåðàöèÿ äåëåíèÿ îñóùåñòâëÿåòñÿ ñ èñïîëüçîâàíèåì ò.í. "áåçîïàñíîãî" àëãîðèòìà, êîòîðûé íèêîãäà íå ïðèâîäèò ê ïåðåïîëíåíèþ ïðè âû÷èñëåíèè ïðîìåæóòî÷íûõ ðåçóëüòàòîâ. Òàêæå áèáëèîòåêà âêëþ÷àåò â ñåáÿ íåñêîëüêî ôóíêöèé, îñóùåñòâëÿþùèõ ýëåìåíòàðíûå îïåðàöèè ñ êîìïëåêñíûìè ÷èñëàìè. |
---|
414 | </p> |
---|
415 | |
---|
416 | <p align=justify> |
---|
417 | <span class=func><b>const</b> double abscomplex(<b>const</b> complex &z)</span><br> |
---|
418 | Ôóíêöèÿ âîçâðàùàåò ìîäóëü êîìïëåêñíîãî ÷èñëà. Ñëåäóåò îòìåòèòü, ÷òî âû÷èñëåíèå ìîäóëÿ îñóùåñòâëÿåòñÿ ñ èñïîëüçîâàíèåì ò.í. "áåçîïàñíîãî" àëãîðèòìà, êîòîðûé íèêîãäà íå ïðèâîäèò ê ïåðåïîëíåíèþ ïðè âû÷èñëåíèè ïðîìåæóòî÷íûõ ðåçóëüòàòîâ. |
---|
419 | </p> |
---|
420 | |
---|
421 | <p align=justify> |
---|
422 | <span class=func><b>const</b> complex conj(<b>const</b> complex &z)</span><br> |
---|
423 | Ôóíêöèÿ âîçâðàùàåò êîìïëåêñíîå ÷èñëî, ñîïðÿæåííîå ñâîåìó àðãóìåíòó. |
---|
424 | </p> |
---|
425 | |
---|
426 | <p align=justify> |
---|
427 | <span class=func><b>const</b> complex csqr(<b>const</b> complex &z)</span><br> |
---|
428 | Ôóíêöèÿ âîçâðàùàåò êâàäðàò àðãóìåíòà. |
---|
429 | </p> |
---|
430 | |
---|
431 | </body> |
---|
432 | </html> |
---|