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


Èòåðaòîðû êëañña veCtOr ïåðå÷èñëåíû â òaáë. 12. Äîñòóï



Download 2 Mb.
bet176/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   172   173   174   175   176   177   178   179   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Èòåðaòîðû êëañña veCtOr ïåðå÷èñëåíû â òaáë. 12.
Äîñòóï n ýëåìåíòaì âåêòîða îñóùåñòâëяåòñя ñ ïîìîùüþ ñëåäóþùèõ îïåðaöèé è ìåòîäîâ:
referenCe OperatOr[](size_type n); COnst_referenCe OperatOr[](size_type n) COnst;

COnst_referenCe at(size_type n) COnst; referenCe at(size_type n);


referenCe frOnt(); COnst_referenCe frOnt() COnst; referenCe baCk(); COnst_referenCe baCk() COnst;
Îïåðaöèя [ ] îñóùåñòâëяåò äîñòóï ê ýëåìåíòó âåêòîða ïî èíäåêñó áåç ïðîâåðêè åãî âûõîäa ça ãðaíèöó âåêòîða. Ôóíêöèя at âûïîëíяåò òaêóþ ïðîâåðêó è ïîðîæ- äaåò èñêëþ÷åíèå Out_Of_range â ñëó÷aå âûõîäa ça ãðaíèöó âåêòîða. Åñòåñòâåííî,
÷òî ôóíêöèя at ðaáîòaåò ìåäëåííåå, ÷åì îïåðaöèя [ ], ïîýòîìó â ñëó÷aяõ, êîãäa äèaïaçîí îïðåäåëåí яâíî, ïðåäïî÷òèòåëüíåå ïîëüçîâaòüñя îïåðaöèåé:
fOr (inti= 0; i ïðîòèâíîì ñëó÷aå èñïîëüçóåòñя ôóíêöèя at ñ îáðaáîòêîé èñêëþ÷åíèя:
try{
//…
v.at(i) = v.at(…);
}
CatCh(Out_Of_range) { … }
Îïåðaöèè äîñòóïa âîçâðaùaþò çía÷åíèå ññûëêè ía ýëåìåíò (referenCe) èëè êîí- ñòaíòíîé ññûëêè (COnst_referenCe) â çaâèñèìîñòè îò òîãî, ïðèìåíяþòñя ëè îíè ê êîíñòaíòíîìó îáúåêòó èëè íåò.
Ìåòîäû frOnt è baCk âîçâðaùaþò ññûëêè ñîîòâåòñòâåííî ía ïåðâûé è ïîñëåäíèé ýëåìåíòû âåêòîða (ýòî íå òî æå ñaìîå, ÷òî begin — óêaçaòåëü ía ïåðâûé ýëåìåíò è end — óêaçaòåëü ía ýëåìåíò, ñëåäóþùèé ça ïîñëåäíèì). Ïðèìåð:
veCtOr v(5, 10);
v.frOnt() = 100; v.baCk() = 100;
COut << v[0] <<"" <Ôóíêöèя CapaCity îïðåäåëяåò ðaçìåð îïåðaòèâíîé ïaìяòè, çaíèìaåìîé âåêòîðîì:
size_type CapaCity() COnst;
Ïaìяòü ïîä âåêòîð âûäåëяåòñя äèíaìè÷åñêè, íî íå ïîä îäèí ýëåìåíò â êaæäûé ìîìåíò âðåìåíè (ýòî áûëî áû ðañòî÷èòåëüíûì ðañõîäîâaíèåì ðåñóðñîâ), a ñðaçó ïîä ãðóïïó ýëåìåíòîâ, íaïðèìåð, 256 èëè 1024. Ïåðåðañïðåäåëåíèå ïaìяòè ïðî- èñõîäèò òîëüêî ïðè ïðåâûøåíèè ýòîãî êîëè÷åñòâa ýëåìåíòîâ, ïðè ýòîì îáúåì âûäåëåííîãî ïðîñòðaíñòâa óäâaèâaåòñя. Ïîñëå ïåðåðañïðåäåëåíèя ëþáûå èòåða- òîðû, ññûëaþùèåñя ía ýëåìåíòû âåêòîða, ñòaíîâяòñя íåäåéñòâèòåëüíûìè, ïî- ñêîëüêó âåêòîð ìîæåò áûòü ïåðåìåùåí â äðóãîé ó÷añòîê ïaìяòè, è íåëüçя îæè- äaòü, ÷òî ñâяçaííûå ñ íèì ññûëêè áóäóò îáíîâëåíû aâòîìaòè÷åñêè.
Cóùåñòâóåò òaêæå ôóíêöèя âûäåëåíèя ïaìяòè reserve, êîòîðaя ïîçâîëяåò çaäaòü, ñêîëüêî ïaìяòè òðåáóåòñя äëя õðaíåíèя âåêòîða:
vOid reserve(size_type n);
Ïðèìåð ïðèìåíåíèя ôóíêöèè:
veCtOr v;
v.reserve(1000); // Âûäåëåíèå ïaìяòè ïîä 1000 ýëåìåíòîâ

Ïîñëå âûïîëíåíèя ýòîé ôóíêöèè çía÷åíèå ôóíêöèè CapaCity áóäåò ðaâíî ïî ìåíüøåé ìåðå n. Ôóíêöèþ reserve ïîëåçíî ïðèìåíяòü òîãäa, êîãäa ðaçìåð âåêòî- ða èçâåñòåí çaðaíåå.


Äëя èçìåíåíèя ðaçìåðîâ âåêòîða ñëóæèò ôóíêöèя resize: vOid resize(size_type sz,TC= T());
Ýòa ôóíêöèя óâåëè÷èâaåò èëè óìåíüøaåò ðaçìåð âåêòîða â çaâèñèìîñòè îò òîãî, áîëüøå çaäaâaåìîå çía÷åíèå sz, ÷åì çía÷åíèå size(), èëè ìåíüøå. Âòîðîé ïaða- ìåòð çaäaåò çía÷åíèå, êîòîðîå ïðèñâaèâaåòñя âñåì íîâûì ýëåìåíòaì âåêòîða. Îíè ïîìåùaþòñя â êîíåö âåêòîða. Åñëè íîâûé ðaçìåð ìåíüøå, ÷åì çía÷åíèå size(), èç êîíöa âåêòîða óäaëяåòñя size() – sz ýëåìåíòîâ.
Îïðåäåëåíû ñëåäóþùèå ìåòîäû äëя èçìåíåíèя îáúånòîâ êëañña veCtOr: vOid push_baCk(COnst T& value);
vOid pOp_baCk();
iteratOr insert(iteratOr pOsitiOn, COnst T& value);
vOid insert(iteratOr pOsitiOn, size_type n, COnst T& value); template
vOid insert(iteratOr pOsitiOn, InputIter first, InputIter last); iteratOr erase(iteratOr pOsitiOn);
iteratOr erase(iteratOr first, iteratOr last); vOid swap();
vOid Clear(); // Î÷èñòêa âåêòîða
Ôóíêöèя push_baCk äîáaâëяåò ýëåìåíò â êîíåö âåêòîða, ôóíêöèя pOp_baCk — óäa- ëяåò ýëåìåíò èç êîíöa âåêòîða.
Ôóíêöèя insert ñëóæèò äëя âñòaâêè ýëåìåíòa â âåêòîð. Ïåðâaя ôîðìa ôóíêöèè âñòaâëяåò ýëåìåíò value â ïîçèöèþ, çaäaííóþ ïåðâûì ïaðaìåòðîì (èòåðaòîðîì), è âîçâðaùaåò èòåðaòîð, ññûëaþùèéñя ía âñòaâëåííûé ýëåìåíò. Âòîðaя ôîðìa ôóíêöèè âñòaâëяåò â âåêòîð n îäèíaêîâûõ ýëåìåíòîâ. Òðåòüя ôîðìa ôóíêöèè ïî- çâîëяåò âñòaâèòü íåñêîëüêî ýëåìåíòîâ, êîòîðûå ìîãóò áûòü çaäaíû ëþáûì äèa- ïaçîíîì ýëåìåíòîâ ïîäõîäяùåãî òèïa, íaïðèìåð:
veCtOr v(2), v1(3,9); int m[3] = {3, 4, 5};
v.insert(v.begin(), m, m + 3); // Cîäåðzèìîå v:34500 v1.insert(v1.begin() + 1, v.begin(),v.begin() + 2);
// Cîäåðzèìîå v1:93499
Âñò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íîâяò- ñя íåäåéñòâèòåëüíûìè.
Ôóíêöèя erase ñëóæèò äëя óäaëåíèя îäíîãî ýëåìåíòa âåêòîða (ïåðâaя ôîðìa ôóíêöèè) èëè äèaïaçîía, çaäaííîãî ñ ïîìîùüþ èòåðaòîðîâ (âòîðaя ôîðìa):
veCtOr v;
fOr (inti= 1; i<6; i++)v.push_baCk(i);

// Cîäåðzèìîå v:12345


v.erase(v.begin()); // Cîäåðzèìîå v:2345 v.erase(v.begin(), v.begin() + 2); // Cîäåðzèìîå v: 4 5
Îáðaòèòå âíèìaíèå, ÷òî òðåòüèì ïaðaìåòðîì çaäaåòñя íå ïîñëåäíèé óäaëяåìûé ýëåìåíò, a ýëåìåíò, ñëåäóþùèé ça íèì.
Êaæäûé âûçîâ ôóíêöèè erase òaê æå, êaê è â ñëó÷aå âñòaâêè, çaíèìaåò âðåìя, ïðîïîðöèîíaëüíîå êîëè÷åñòâó ñäâèãaåìûõ ía íîâûå ïîçèöèè ýëåìåíòîâ. Âñå èòåðaòîðû è ññûëêè «ïðaâåå» ìåñòa óäaëåíèя ñòaíîâяòñя íåäåéñòâèòåëüíûìè.
Ôóíêöèя swap ñëóæèò äëя îáìåía ýëåìåíòîâ äâóõ âåêòîðîâ îäíîãî òèïa, íî íå îáяçaòåëüíî îäíîãî ðaçìåða:
veCtOr v1, v2;

v1.swap(v2); // Ýêâèâaëåíòíî v2.swap(v1);
Äëя âåêòîðîâ îïðåäåëåíû îïåðaöèè ñðaâíåíèя = =, !=, <, , <= è =. Äâa âåêòîða ñ÷è- òaþòñя ðaâíûìè, åñëè ðaâíû èõ ðaçìåðû è âñå ñîîòâåòñòâóþùèå ïaðû ýëåìåíòîâ. Îäèí âåêòîð ìåíüøå äðóãîãî, åñëè ïåðâûé èç ýëåìåíòîâ îäíîãî âåêòîða, íå ðaâ- íûé ñîîòâåòñòâóþùåìó ýëåìåíòó äðóãîãî, ìåíüøå íåãî (òî åñòü ñðaâíåíèå ëåêñè- êîãðaôè÷åñêîå). Ïðèìåð:
inClude using namespaCe std; veCtOr v7, v8; int main(){
fOr (inti= 0; i<6; i++)v7.push_baCk(i); COut << "v7: ";
fOr (inti= 0; i<6; i++) COut << v7[i] << " "; COut << endl;
fOr (inti= 0; i<3; i++)v8.push_baCk(i+1); COut << "v8: ";
fOr (inti= 0; i<3; i++) COut << v8[i] << " "; COut << endl;
if (v7 < v8 ) COut << " v7 < v8" << endl; else COut << " v7 > v8" << endl;
}
Ðåçóëüòaò ðaáîòû ïðîãðaììû:
v7:012345
v8:123
v7Äëя ýôôåêòèâíîé ðaáîòû ñ âåêòîðaìè â ñòaíäaðòíîé áèáëèîòåêå îïðåäåëåíû øaáëîíû ôóíêöèé, íaçûâaåìûå aëãîðèòìaìè. Îíè âêëþ÷aþò â ñåáя ïîèñê çía÷å- íèé, ñîðòèðîâêó ýëåìåíòîâ, âñòaâêó, çaìåíó, óäaëåíèå è äðóãèå îïåðaöèè. Àëãî- ðèòìû îïèñaíû â ðaçäåëå «Àëãîðèòìû» ía ñ. 343.

Векторы логических значений (vector )


Cïåöèaëèçaöèя øaáëîía veCtOr îïðåäåëåía äëя îïòèìèçaöèè ðaçìåùåíèя ïaìяòè, ïîñêîëüêó ìîæíî ðåaëèçîâaòü âåêòîð ëîãè÷åñêèõ çía÷åíèé òaê, ÷òîáû

åãî ýëåìåíò çaíèìaë 1 áèò. Ïðè ýòîì aäðåñaöèя îòäåëüíûõ áèòîâ âûïîëíяåòñя ïðîãðaììíî. Èòåðaòîð òaêîãî âåêòîða íå ìîæåò áûòü óêaçaòåëåì.  îñòaëüíîì âåêòîðû ëîãè÷åñêèõ çía÷åíèé aíaëîãè÷íû îáû÷íûì è ðåaëèçóþò òîò æå íaáîð îïåðaöèé è ìåòîäîâ.  äîïîëíåíèå ê íèì îïðåäåëåíû ìåòîäû èíâåðòèðîâaíèя áèòa è âåêòîða â öåëîì (flip).


Cñûëêa ía ýëåìåíò âåêòîða ëîãè÷åñêèõ çía÷åíèé ðåaëèçîâaía â âèäå êëañña
referenCe, ìîäåëèðóþùåãî îáû÷íóþ ññûëêó ía ýëåìåíò:
Class referenCe{
friend Class veCtOr; referenCe();
publiC:
~referenCe();
OperatOr bOOl() COnst;
referenCe& OperatOr=(COnst bOOl x); referenCe& OperatOr=(COnst referenCe& x); vOid flip();
};
Ïðèìåð (ñ êëaâèaòóðû ââîäяòñя â âåêòîð 10 çía÷åíèé 0 èëè 1, ïîñëå ÷åãî îíè âû- âîäяòñя ía ýêðaí).
inClude inClude using namespaCe std; veCtOr v (10); int main(){
fOr(inti= 0; i> v[i];
fOr (veCtOr :: COnst_iteratOrp= v.begin(); p!=v.end(); ++p) COut << *p;
}



Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   172   173   174   175   176   177   178   179   ...   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