329
for(int i = 0; i> v[i];
for (vector :: const_iterator p = v.begin();
p!=v.end();
++p)
cout << *p;
}
Екіжақты кезектер (deque)
Екіжақты кезек – вектормен қатар, элементтерге
кездейсоқ қол жеткізуді
сүйемелдейтін жəне тұрақты уақыт ішінде кезектің екі жағынан да элементтерді
кірістіру мен жоюды қамтамасыз ететін тізбекті контейнер. Кезектің ішіндегі
элементтермен орындалатын осындай операциялар
орны ауыстырылатын эле-
менттер санына пропорционал уақыт алады. Мұнда жадыны бөлу автоматты
түрде орындалады.
Кезекті ұйымдастыру схемасын қарастырайық (12.1-сурет). Элементтеріне
тұрақты уақыт ішінде кездейсоқ түрде қол жеткізуді қамтамасыз ету үшін
кезек
блоктарға бөлінген, олардың əрқайсысына қол жеткізу нұсқауыш
арқылы жүзеге асырылады. Суреттегі боялған аймақтар кезектің бос емес
элементтерін көрсетеді. Егер басына немесе соңына
элементті қосу кезінде
блок толып кетсе, келесі блокқа жады бөлінеді (мысалы, 4-блок толған соң
5 -блокқа, ал 2-блок толған соң 1-блокқа жады бөлінеді).
Блоктардың ішіндегі
шеткісін толтырған кезде тек ортаңғы элементтер қолданылатындай түрде
нұсқауыштар жиымына жады қайта үлестіріледі. Ол көп уақыт алмайды. Осы-
лайша, кезек элементтеріне қол жеткізу тұрақты уақыт кезеңінде орындалады,
алайда бұл уақыт векторға қарағанда көбірек болады.
12.1-сурет.
Екіжақты кезектің ұйымдастырылуы
Екіжақты кезекті құру үшін вектор конструкторларына
ұқсайтын келесі
конструкторларды қолдануға болады (қарапайым жазба түрі келтірілген):
22-1140