Ýòîò äîêóìåíò îïèñûâàåò áèáëèîòåêó AP, àäàïòèðîâàííóþ äëÿ ÿçûêà C++. Áèáëèîòåêà AP äëÿ Ñ++ ñîäåðæèò áàçîâûé íàáîð ìàòåìàòè÷åñêèõ ôóíêöèé è êëàññû-êîëëåêöèè, êîòîðûå òðåáóþòñÿ äëÿ ðàáîòû ïðîãðàìì ñ ñàéòà "Áèáëèîòåêà àëãîðèòìîâ".
Äàííàÿ áèáëèîòåêà äîëæíà áûòü ñîâìåñòèìà ñ ëþáûì êîìïèëÿòîðîì Ñ++.
 ñîñòàâ áèáëèîòåêè âõîäÿò ôàéëû ap.h è ap.cpp. Äëÿ íà÷àëà ðàáîòû äîñòàòî÷íî ïîäêëþ÷èòü ôàéë ap.cpp ê ïðîåêòó.
 çàãîëîâî÷íîì ôàéëå ap.h îïðåäåëÿåòñÿ ïðîñòðàíñòâî èìåí ap. Ñëåäóåò ó÷èòûâàòü, ÷òî èìåíà ôóíêöèé, êîíñòàíò è êëàññîâ, ïðèâåäåííûå äàëüøå, ñëåäóåò ïðåäâàðÿòü ïðåôèêñîì ap::
AP_WIN32
Ýòîò ñèìâîë, åñëè îí îïðåäåëåí ïîëüçîâàòåëåì, ñîîáùàåò áèáëèîòåêå, ÷òî îíà êîìïèëèðóåòñÿ â Win32. Îïðåäåëåíèå ýòîãî ñèìâîëà ïîçâîëÿåò èñïîëüçîâàòü áèáëèîòåêó ABLAS (áàçîâûå àëãîðèòìû ëèíåéíîé àëãåáðû ñ ïîääåðæêîé SSE2), åñëè îíà óñòàíîâëåíà â ñèñòåìå.
AP_ASSERT
Ýòîò ñèìâîë âêëþ÷àåò ïðîâåðêó ãðàíèö ìàññèâà. Åñëè îí îïðåäåëåí äèðåêòèâîé define, òî ïðè êàæäîì îáðàùåíèè ê ýëåìåíòàì äèíàìè÷åñêîãî ìàññèâà ïðîâåðÿåòñÿ ïðàâèëüíîñòü ïåðåäàííîãî èíäåêñà.  ñëó÷àå îøèáêè ãåíåðèðóåòñÿ èñêëþ÷åíèå ap_error. Ïðîâåðêà ãðàíèö ìàññèâà äåëàåò ïðîãðàììó áîëåå íàäåæíîé, íî çàìåäëÿåò ðàáîòó.
NO_AP_ASSERT
Ýòîò ñèìâîë îòêëþ÷àåò ïðîâåðêó ãðàíèö ìàññèâà. Åñëè îí îïðåäåëåí äèðåêòèâîé define, òî ïðè îáðàùåíèè ê ýëåìåíòó äèíàìè÷åñêîãî ìàññèâà âûõîä èíäåêñà çà ãðàíèöû ìàññèâà íå ïðîâåðÿåòñÿ.
UNSAFE_MEM_COPY
Äèðåêòèâà define, îïðåäåëÿþùàÿ ýòîò ñèìâîë, îòêëþ÷åíà. Íå âêëþ÷àéòå å¸. Áèáëèîòåêà íå ñîäåðæèò íèêàêîé äîêóìåíòàöèè ïî ïîâîäó ýòîãî ñèìâîëà.
machineepsilon
Ýòà êîíñòàíòà îïðåäåëÿåò òî÷íîñòü ìàøèííûõ îïåðàöèé, ò.å. ìèíèìàëüíîå ÷èñëî, òàêîå, ÷òî 1+machineepsilon≠1 íà äàííîé ðàçðÿäíîé ñåòêå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ òî÷íîñòü ìîæåò áûòü åù¸ âûøå.
maxrealnumber
Ýòà êîíñòàíòà îïðåäåëÿåò ìàêñèìàëüíîå ïîëîæèòåëüíîå âåùåñòâåííîå ÷èñëî, ïðåäñòàâèìîå íà äàííîé ìàøèíå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ ãðàíèöà ìîæåò áûòü åù¸ âûøå.
minrealnumber
Ýòà êîíñòàíòà îïðåäåëÿåò ìèíèìàëüíîå ïîëîæèòåëüíîå âåùåñòâåííîå ÷èñëî, ïðåäñòàâèìîå íà äàííîé ìàøèíå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ ãðàíèöà ìîæåò áûòü åù¸ íèæå.
int sign(double x)
Âîçâðàùàåò:
+1, åñëè X>0
-1, åñëè X<0
0, åñëè X=0
double randomreal()
Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå ÷èñëî â ïîëóèíòåðâàëå [0,1).
int randominteger(int maxv)
Âîçâðàùàåò ñëó÷àéíîå öåëîå ÷èñëî â ïîëóèíòåðâàëå [0, maxv).
double round(double x)
Îêðóãëåíèå ê áëèæàéøåìó öåëîìó. Åñëè X íàõîäèòñÿ òî÷íî ïîñåðåäèíå ìåæäó äâóìÿ öåëûìè, òî ðåçóëüòàò ôóíêöèè çàâèñèò îò ðåàëèçàöèè.
double trunc(double x)
Îòáðàñûâàíèå äðîáíîé ÷àñòè X.
trunc(1.3) = 1
trunc(-1.3)= -1
double pi()
Âîçâðàùàåò êîíñòàíòó π
double sqr(double x)
Âîçâðàùàåò x2
double maxreal(double m1, double m2)
Âîçâðàùàåò ìàêñèìóì èç äâóõ âåùåñòâåííûõ ÷èñåë.
double minreal(double m1, double m2)
Âîçâðàùàåò ìèíèìóì èç äâóõ âåùåñòâåííûõ ÷èñåë.
int maxint(int m1, int m2)
Âîçâðàùàåò ìàêñèìóì èç äâóõ öåëûõ ÷èñåë.
int minint(int m1, int m2)
Âîçâðàùàåò ìèíèìóì èç äâóõ öåëûõ ÷èñåë.
Ýòî êëàññ èñêëþ÷åíèÿ, êîòîðîå âûáðàñûâàåòñÿ ïðè ðàçëè÷íûõ îøèáêàõ áèáëèîòåêè AP, â ÷àñòíîñòè - ïðè íåâåðíîì óêàçàíèè èíäåêñà ìàññèâà, åñëè âêëþ÷åíà ïðîâåðêà ãðàíèö ìàññèâà. Òåêóùàÿ âåðñèÿ êëàññà íå ñîäåðæèò íèêàêèõ ïîëåé è íå ïîçâîëÿåò îïðåäåëèòü ïðè÷èíó, ïî êîòîðîé èñêëþ÷åíèå áûëî ñãåíåðèðîâàíî.
Çäåñü ìû ðàññìîòðèì îáùèå ïðèíöèïû ðàáîòû ñ êëàññàìè-ìàññèâàìè, ïîñëå ÷åãî áóäóò ðàññìîòðåíû ñàìè êëàññû è èõ ìåòîäû.
Êëàññû, âõîäÿùèå â ñîñòàâ ñòàíäàðòíîé áèáëèîòåêè, ïîçâîëÿþò îïåðèðîâàòü ñ ìàòðèöàìè è âåêòîðàìè (îäíîìåðíûìè è äâóõìåðíûìè ìàññèâàìè) ïåðåìåííîãî ðàçìåðà, ñ ïåðåìåííîé íóìåðàöèåé ýëåìåíòîâ, ò.å. íóìåðàöèÿ ìîæåò íà÷èíàòüñÿ ñ ëþáîãî ÷èñëà, çàêàí÷èâàòüñÿ ëþáûì ÷èñëîì è äèíàìè÷åñêè ìåíÿòüñÿ. Òàê êàê êëàññû ìàññèâîâ ÿâëÿþòñÿ øàáëîíàìè, òî ìàññèâû îäíîé ðàçìåðíîñòè îáëàäàþò îäèíàêîâûì íàáîðîì ôóíêöèé-÷ëåíîâ. À ïîñêîëüêó ôóíêöèè-÷ëåíû ìàññèâîâ ðàçíûõ ðàçìåðíîñòåé îòëè÷àþòñÿ òîëüêî êîëè÷åñòâîì àðãóìåíòîâ, òî äâóìåðíûå è îäíîìåðíûå ìàññèâû ìàëî ÷åì îòëè÷àþòñÿ äðóã îò äðóãà.
Ðàáîòà ñ ìàññèâîì íà÷èíàåòñÿ ñ ñîçäàíèÿ ìàññèâà. Ñëåäóåò ðàçëè÷àòü ñîçäàíèå ýêçåìïëÿðà êëàññà-ìàññèâà è âûäåëåíèå ïàìÿòè ïîä ìàññèâ. Ïðè ñîçäàíèè ýêçåìïëÿðà êëàññà ìîæåò èñïîëüçîâàòüñÿ êîíñòðóêòîð áåç ïàðàìåòðîâ, ñîçäàþùèé ìàññèâ áåç ýëåìåíòîâ, à ìîãóò èñïîëüçîâàòüñÿ êîíñòðóêòîðû êîïèé è ïðèñâàèâàíèÿ, êîïèðóþùèå îäèí ìàññèâ â äðóãîé.  ñëó÷àå ñîçäàíèÿ ìàññèâà êîíñòðóêòîðîì ïî óìîë÷àíèþ îí íå ñîäåðæèò ýëåìåíòîâ è ïîïûòêà îáðàòèòüñÿ ê íèì ìîæåò ïðèâåñòè ê êðàõó ïðîãðàììû. Åñëè ïðè êîïèðîâàíèè ìàññèâ-èñòî÷íèê íå èìååò âûäåëåííîé ïàìÿòè ïîä ýëåìåíòû, òî ìàññèâ-êîïèÿ òîæå íå áóäåò ñîäåðæàòü ýëåìåíòîâ. Åñëè ìàññèâ-èñòî÷íèê èìååò âûäåëåííóþ ïîä ýëåìåíòû ïàìÿòü, òî ìàññèâ-êîïèÿ âûäåëÿåò òîò æå îáúåì ïàìÿòè è êîïèðóåò â íå¸ ýëåìåíòû. Ò.å. ïðè êîïèðîâàíèè ïîëó÷àþòñÿ äâà ïîëíîñòüþ íåçàâèñèìûõ ìàññèâà ñ îäèíàêîâûì ñîäåðæèìûì.
Ïîñëå ñîçäàíèÿ ïóñòîãî ìàññèâà ñëåäóåò âûäåëèòü ïàìÿòü ïîä ýëåìåíòû ïðè ïîìîùè ìåòîäà
Äëÿ îáðàùåíèÿ ê ýëåìåíòàì ìàññèâà èñïîëüçóåòñÿ ïåðåãðóæåííûé
integer_1d_array factarr(int n)
{
integer_1d_array result;
result.setbounds(1,n);
result(1) = 1;
for(int i=2; i<=n; i++)
result(i) = result(i-1)*i;
return result;
}
Ýòî êëàññ-øàáëîí äèíàìè÷åñêîãî îäíîìåðíîãî ìàññèâà ñ ïåðåìåííûìè âåðõíåé è íèæíåé ãðàíèöàìè. Íà îñíîâå ýòîãî êëàññà ïîëó÷åíû ñëåäóþùèå êëàññû:
typedef template_1d_array<int> integer_1d_array; typedef template_1d_array<double> real_1d_array; typedef template_1d_array<bool> boolean_1d_array; typedef template_1d_array<complex> complex_1d_array;
template_1d_array()
Êîíñòðóêòîð. Ñîçäàíèå ïóñòîãî ìàññèâà.
~template_1d_array()
Äåñòðóêòîð. Ïðè âûçîâå îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä ìàññèâ ïàìÿòü
template_1d_array(const template_1d_array &rhs)
Êîíñòðóêòîð êîïèé ìàññèâà. Ïðè ýòîì âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà.
const template_1d_array& operator=(const template_1d_array &rhs)
Ïðèñâàèâàíèå ìàññèâà. Ïðè ýòîì ñîäåðæèìîå ìàññèâà-ïðèåìíèêà óäàëÿåòñÿ è îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà.
T& operator()(int i)
Îáðàùåíèå ê ýëåìåíòó ìàññèâà ñ íîìåðîì i
void setbounds(int iLow, int iHigh)
Âûäåëåíèå ïàìÿòè ïîä ìàññèâ. Ïðè ýòîì ñòàðîå ñîäåðæèìîå ìàññèâà óäàëÿåòñÿ è îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè ðàçìåðà iHigh-iLow+1 ýëåìåíòîâ.
Íóìåðàöèÿ ýëåìåíòîâ â íîâîì ìàññèâà íà÷èíàåòñÿ ñ iLow è çàêàí÷èâàåòñÿ iHigh. Ñîäåðæèìîå íîâîãî ìàññèâà íå îïðåäåëåíî.
void setcontent(int iLow, int iHigh, const T *pContent)
Ìåòîä àíàëîãè÷åí ìåòîäó setbounds() çà òåì èñêëþ÷åíèåì, ÷òî ïîñëå âûäåëåíèÿ ïàìÿòè â íå¸ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà pContent[].
T* getcontent()
Ìåòîä ïîçâîëÿåò ïîëó÷èòü óêàçàòåëü íà ñîäåðæèìîå ìàññèâà. Äàííûå, íà êîòîðûå óêàçûâàåò âîçâðàùåííûé óêàçàòåëü, ìîæíî èçìåíÿòü, è ïðè ýòîì èçìåíèòñÿ ñîäåðæèìîå ìàññèâà.
int getlowbound()
int gethighbound()
Ìåòîäû èñïîëüçóþòñÿ äëÿ ïîëó÷åíèÿ èíôîðìàöèè î íèæíåé è âåðõíåé ãðàíèöàõ ìàññèâà.
raw_vector<T> getvector(int iStart, int iEnd)
Ìåòîä èñïîëüçóåòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîä âîçâðàùàåò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü âåêòîðà (íà÷èíàÿ ñ ýëåìåíòà ñ èíäåêñîì iStart è çàêàí÷èâàÿ èíäåêñîì iEnd). Åñëè iEnd<iStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé âåêòîð.
const_raw_vector<T> getvector(int iStart, int iEnd) const
Ìåòîä èñïîëüçóåòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîä âîçâðàùàåò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü âåêòîðà (íà÷èíàÿ ñ ýëåìåíòà ñ èíäåêñîì iStart è çàêàí÷èâàÿ èíäåêñîì iEnd). Åñëè iEnd<iStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé âåêòîð. Âîçâðàùåííûé îáúåêò ïîçâîëÿåò ïîëó÷àòü äîñòóï òîëüêî äëÿ ÷òåíèÿ.
Ýòî êëàññ-øàáëîí äèíàìè÷åñêîãî äâóõìåðíîãî ìàññèâà ñ ïåðåìåííûìè âåðõíåé è íèæíåé ãðàíèöàìè. Íà îñíîâå ýòîãî êëàññà ïîëó÷åíû ñëåäóþùèå êëàññû:
typedef template_2d_array<int> integer_2d_array; typedef template_2d_array<double> real_2d_array; typedef template_2d_array<bool> boolean_2d_array; typedef template_2d_array<complex> complex_2d_array;
template_2d_array()
Êîíñòðóêòîð. Ñîçäàíèå ïóñòîãî ìàññèâà.
~template_2d_array()
Äåñòðóêòîð. Ïðè âûçîâå îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä ìàññèâ ïàìÿòü
template_2d_array(const template_2d_array &rhs)
Êîíñòðóêòîð êîïèé ìàññèâà. Ïðè ýòîì âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà
const template_2d_array& operator=(const template_2d_array &rhs)
Ïðèñâàèâàíèå ìàññèâà. Ïðè ýòîì ñîäåðæèìîå ìàññèâà-ïðèåìíèêà óäàëÿåòñÿ è îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå èñòî÷íèêà.
T& operator()(int i1, int i2)
Îáðàùåíèå ê ýëåìåíòó ìàññèâà ñ èíäåêñîì [i1,i2]
void setbounds(int iLow1, int iHigh1, int iLow2, int iHigh2)
Âûäåëåíèå ïàìÿòè ïîä ìàññèâ. Ïðè ýòîì ñòàðîå ñîäåðæèìîå ìàññèâà óäàëÿåòñÿ è îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè ðàçìåðîì (iHigh1-iLow1+1)*(iHigh2-iLow2+1) ýëåìåíòîâ.
Íóìåðàöèÿ ýëåìåíòîâ â íîâîì ìàññèâà ïî ïåðâîé ðàçìåðíîñòè íà÷èíàåòñÿ ñ iLow1 è çàêàí÷èâàåòñÿ iHigh1, àíàëîãè÷íî äëÿ âòîðîé ðàçìåðíîñòè.
Ñîäåðæèìîå íîâîãî ìàññèâà íå îïðåäåëåíî.
void setcontent(int iLow1, int iHigh1, int iLow2, int iHigh2, const T *pContent)
Ìåòîä àíàëîãè÷åí ìåòîäó setbounds() çà òåì èñêëþ÷åíèåì, ÷òî ïîñëå âûäåëåíèÿ ïàìÿòè â íå¸ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà pContent[].
Ìàññèâ pContent ñîäåðæèò äâóõìåðíûé ìàññèâ, çàïèñàííûé ïîñòðî÷íî, ò.å. ïåðâûì èäåò ýëåìåíò [iLow1, iLow2], çàòåì [iLow1, iLow2+1] è ò.ä.
int getlowbound(int iBoundNum)
int gethighbound(int iBoundNum)
Ìåòîäû èñïîëüçóþòñÿ äëÿ ïîëó÷åíèÿ èíôîðìàöèè î íèæíåé è âåðõíåé ãðàíèöàõ ìàññèâà ïî ðàçìåðíîñòè ñ ïåðåäàííûì íîìåðîì.
raw_vector
const_raw_vector
Ïàðàìåòð iColumn äîëæåí áûòü äîïóñòèìûì íîìåðîì ñòîëáöà (ò.å. íàõîäèòüñÿ â ïðåäåëàõ âûäåëåííîé ïîä ìàññèâ ïàìÿòè). Åñëè iRowEnd<iRowStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé ñòîëáåö.
raw_vector
const_raw_vector
Ïàðàìåòð iRow äîëæåí áûòü äîïóñòèìûì íîìåðîì ñòðîêè (ò.å. íàõîäèòüñÿ â ïðåäåëàõ âûäåëåííîé ïîä ìàññèâ ïàìÿòè). Åñëè iColumnEnd<iColumnStart, òî ñ÷èòàåòñÿ, ÷òî çàäàíà ïóñòàÿ ñòðîêà.
Áàçîâûå ïîäïðîãðàììû ëèíåéíîé àëãåáðû áèáëèîòåêè AP ïî ñâîåé ôóíêöèîíàëüíîñòè áëèçêè ê Level 1 BLAS, ïîçâîëÿÿ îñóùåñòâëÿòü ïðîñòåéøèå îïåðàöèè ñ âåêòîðàìè, à òàêæå ñî ñòðîêàìè è ñòîëáöàìè ìàòðèö.
Ðàáîòà ñ ïîäïðîãðàììàìè îñóùåñòâëÿåòñÿ ñëåäóþùèì îáðàçîì. Ñíà÷àëà íåîáõîäèìî ïîëó÷èòü îáúåêò òèïà raw_vector èëè const_raw_vector, óêàçûâàþùèé íà îáðàáàòûâàåìóþ ÷àñòü ìàòðèöû èëè ìàññèâà ïðè ïîìîùè ìåòîäîâ getcolumn/getrow (äëÿ ìàòðèöû) èëè getvector (äëÿ ìàññèâà). Îáúåêò ñîäåðæèò â ñåáå óêàçàòåëü íà íà÷àëî ñòðîêè (èëè ñòîëáöà), ÷èñëî ýëåìåíòîâ â îáðàáàòûâàåìîé ñòðîêå è èíòåðâàë ìåæäó äâóìÿ ñîñåäíèìè ýëåìåíòàìè. Ïðè èñïîëüçîâàíèè ñòàíäàðòíîé ñõåìû õðàíåíèÿ ìàòðèö â ïàìÿòè (ò.å. ïðè õðàíåíèè ïî ñòðîêàì) èíòåðâàë ìåæäó ýëåìåíòàìè îäíîé ñòðîêè ðàâåí 1, à èíòåðâàë ìåæäó ýëåìåíòàìè îäíîãî ñòîëáöà ðàâåí ÷èñëó ñòîëáöîâ. Ïîëó÷åííûé îáúåêò ïåðåäàåòñÿ â êà÷åñòâå àðãóìåíòà â ñîîòâåòñâóþùóþ ïîäïðîãðàììó, êîòîðàÿ îñóùåñòâëÿåò îïåðàöèè íàä ÷àñòüþ ìàòðèöû, íà êîòîðóþ óêàçûâàåò âíóòðåííèé óêàçàòåëü îáúåêòà.
Íèæå ïðèâåäåí ñïèñîê áàçîâûõ ïîäïðîãðàìì ëèíåéíîé àëãåáðû, äîñòóïíûõ â ñîñòàâå áèáëèîòåêè AP.
template<class T> T vdotproduct(const_raw_vector<T> v1, const_raw_vector<T> v2)
Ïîäïðîãðàììà âû÷èñëÿåò ñêàëÿðíîå ïðîèçâåäåíèå ïåðåäàííûõ âåêòîðîâ.
template<class T> void vmove(raw_vector<T> vdst, const_raw_vector<T> vsrc)
template<class T> void vmoveneg(raw_vector<T> vdst, const_raw_vector<T> vsrc)
template<class T, class T2> void vmove(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)
Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ êîïèðîâàíèÿ ñîäåðæèìîãî îäíîãî âåêòîðà íà ìåñòî äðóãîãî âåêòîðà: ïðîñòîãî êîïèðîâàíèÿ, êîïèðîâàíèÿ ñ óìíîæåíèåì íà -1, êîïèðîâàíèÿ ñ óìíîæåíèåì íà ÷èñëî.
template<class T> void vadd(raw_vector<T> vdst, const_raw_vector<T> vsrc)
template<class T, class T2> void vadd(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)
Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ äîáàâëåíèÿ îäíîãî âåêòîðà ê äðóãîìó: ïðîñòîãî äîáàâëåíèÿ èëè äîáàâëåíèÿ ñ óìíîæåíèåì íà ÷èñëî.
template<class T> void vsub(raw_vector<T> vdst, const_raw_vector<T> vsrc)
template<class T, class T2> void vsub(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)
Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ âû÷èòàíèÿ îäíîãî âåêòîðà èç äðóãîãî: ïðîñòîãî âû÷èòàíèÿ èëè âû÷èòàíèÿ ñ óìíîæåíèåì íà ÷èñëî.
template<class T, class T2> void vmul(raw_vector<T> vdst, T2 alpha)
Ýòà ïîäïðîãðàììà ñëóæèò äëÿ óìíîæåíèÿ âåêòîðà íà ÷èñëî ñ ñîõðàíåíèåì ðåçóëüòàòà â òîì æå ìåñòå.
 ñëó÷àå åñëè îáà îïåðàíäà ÿâëÿþòñÿ âåêòîðàìè ñ èíòåðâàëîì ìåæäó ýëåìåíòàìè, ðàâíûì 1, è äëèíîé N, ìîæíî èñïîëüçîâàòü àëüòåðíàòèâíûé ñèíòàêñèñ.
template<class T> T vdotproduct(const T *v1, const T *v2, int N)
template<class T> void vmove(T *vdst, const T *vsrc, int N)
template<class T> void vmoveneg(T *vdst, const T *vsrc, int N)
template<class T, class T2> void vmove(T *vdst, const T *vsrc, int N, T2 alpha)
template<class T> void vadd(T *vdst, const T *vsrc, int N)
template<class T, class T2> void vadd(T *vdst, const T *vsrc, int N, T2 alpha)
template<class T> void vsub(T *vdst, const T *vsrc, int N)
template<class T, class T2> void vsub(T *vdst, const T *vsrc, int N, T2 alpha)
template<class T, class T2> void vmul(T *vdst, int N, T2 alpha)
Áèáëèîòåêà AP ñîäåðæèò êëàññ ap::complex, êîòîðûé ïîçâîëÿåò îñóùåñòâëÿòü îïåðàöèè ñ êîìïëåêñíûìè ÷èñëàìè. Äîñòóï ê äåéñòâèòåëüíîé è ìíèìîé ÷àñòÿì êîìïëåêñíîãî ÷èñëà îñóùåñòâëÿåòñÿ ÷åðåç îòêðûòûå (public) ïîëÿ x è y. Ïîääåðæèâàþòñÿ àðèôìåòè÷åñêèå îïåðàöèè, êàê ñî âñòðîåííûìè òèïàìè äàííûõ, ïóòåì ïåðåãðóçêè îïåðàöèé ñëîæåíèÿ, âû÷èòàíèÿ, óìíîæåíèÿ è äåëåíèÿ. Ñëîæåíèå, âû÷èòàíèå è óìíîæåíèå îñóùåñòâëÿþòñÿ îáû÷íûì ñïîñîáîì (ò.å. ïî îïðåäåëåíèþ, êîòîðîå ìîæíî íàéòè â ëþáîì ó÷åáíèêå àëãåáðû), îïåðàöèÿ äåëåíèÿ îñóùåñòâëÿåòñÿ ñ èñïîëüçîâàíèåì ò.í. "áåçîïàñíîãî" àëãîðèòìà, êîòîðûé íèêîãäà íå ïðèâîäèò ê ïåðåïîëíåíèþ ïðè âû÷èñëåíèè ïðîìåæóòî÷íûõ ðåçóëüòàòîâ. Òàêæå áèáëèîòåêà âêëþ÷àåò â ñåáÿ íåñêîëüêî ôóíêöèé, îñóùåñòâëÿþùèõ ýëåìåíòàðíûå îïåðàöèè ñ êîìïëåêñíûìè ÷èñëàìè.
const double abscomplex(const complex &z)
Ôóíêöèÿ âîçâðàùàåò ìîäóëü êîìïëåêñíîãî ÷èñëà. Ñëåäóåò îòìåòèòü, ÷òî âû÷èñëåíèå ìîäóëÿ îñóùåñòâëÿåòñÿ ñ èñïîëüçîâàíèåì ò.í. "áåçîïàñíîãî" àëãîðèòìà, êîòîðûé íèêîãäà íå ïðèâîäèò ê ïåðåïîëíåíèþ ïðè âû÷èñëåíèè ïðîìåæóòî÷íûõ ðåçóëüòàòîâ.
const complex conj(const complex &z)
Ôóíêöèÿ âîçâðàùàåò êîìïëåêñíîå ÷èñëî, ñîïðÿæåííîå ñâîåìó àðãóìåíòó.
const complex csqr(const complex &z)
Ôóíêöèÿ âîçâðàùàåò êâàäðàò àðãóìåíòà.