lists stl
Упознајте све о листама у СТЛ-у заједно са њиховом применом.
Листе су секвенцијални контејнери. Листе садрже елементе на несаседним локацијама. У претходним водичима разговарали смо о низовима и векторима.
У случају контејнера низа и вектора, јер ови контејнери чувају податке у непрекидној меморији, операција уметања у средину ових контејнера показује се врло скупо јер морамо постојеће елементе пребацити у складу с тим како бисмо направили простор за нови елемент.
=> Погледајте овде како бисте истражили целу листу водича за Ц ++.
како отворити .7з датотеку мац
Шта ћете научити:
Преглед
Листа је контејнер који превазилази овај недостатак низа и векторских контејнера. Омогућава нам да уметнемо елементе било где на листу, а да притом не направимо превише трошкова. Али листе су спорије од вектора што се тиче обилажења.
У овом упутству ћемо видети примену листа у СТЛ-у заједно са разним операцијама преласка, манипулација и приступања листи са примерима.
Имајте на уму да је већина операција са листама слична онима вектора и стога читаоци који су већ прочитали наш водич о векторима неће имати проблема у тумачењу концепата листе.
Изјава и иницијализација
Да бисмо применили контејнер листе и искористили све његове предности, у наш програм морамо да уврстимо датотеку заглавља.
#include
Општа декларација за контејнер листе је
std::list listName;
На пример,листу с именом „милист“ типа инт можемо прогласити на следећи начин:
std::list mylist;
Такође можемо иницијализовати листу у време декларације или јој додати елементе помоћу једне од операција коју она подржава.
Погледајмо како можемо да иницијализујемо листу коју смо горе креирали.
std::list mylist = {1, 1, 2, 3, 5};
Горња иницијализација биће постављена у меморију као што је приказано доле:
Једном када иницијализујемо листу, можемо приступити елементима листе помоћу итератора. Функције „Итератор“ „почетак“ и „крај“ помажу нам да прелазимо кроз елементе листе.
Белешка: Итератор за листу такође подржава друге итераторе као што су обрнути итератори (рбегин, ренд), константни итератори (цбегин, ценд) и константни обрнути итератори (црбегин, цренд) и могу се користити на сличан начин попут вектора.
Следећи пример то показује.
#include #include #include #include using namespace std; int main() { list mylist = {1, 1, 2, 3, 5}; cout<<”List elements are: “; list::iterator it; for(it=mylist.begin();it!=mylist.end();++it) cout<<*it<<” “; }
Излаз:
Елементи листе су: 1 1 2 3 5
Тако смо у горњем примеру прогласили листу Фибоначијевог низа. Даље, декларишемо итератор истог типа као листа, а затим помоћу петље фор исписујемо садржај листе од почетка до краја.
Пређимо сада на операције или функције које нам пружа контејнер са списком у СТЛ-у.
Листа операција
- Уметни: Користи се за уметање елемента у дату позицију. Враћа итератор који показује на први уметнути елемент.
убаци (поз, нум_елем, елем)
Где,
пос => Положај на којем се убацују нови елементи.
нум_елем => Број елемената за уметање; подразумевано је 1.
ставка => Стварна вредност која се убацује.
Да разумемо функцију уметања узимајући Пример.
#include #include // for list operations using namespace std; int main() { list mylist = {1,1,2}; list::iterator it = mylist.begin(); // iterator to point to 4th position advance(it,` 3); // inserts 3 at 4th position mylist.insert(it, 3); cout << 'The list after inserting' << ' 1 element using insert() is : '; for (list::iterator i = mylist.begin();i != mylist.end();i++) cout << *i << ' '; cout << endl; }
Излаз:
Листа након уметања 1 елемента помоћу инсерт () је: 1 1 2 3
Ово је пример за уметање само једног елемента у 4тхпозиција на листи која је на крају последња позиција. Отуда, прво, имамо листу за коју смо дефинисали итератор који показује на почетак листе. Затим померимо овај итератор на 4тхположај и затим позовите уметак да бисте уметнули 1 елемент.
Такође можемо убацити више елемената, специфицирањем другог параметра у функцији уметања. Кад год није наведен, подразумевано је 1.
- потисне :Додаје нови елемент на крају листе.
- пусх_фронт :Додаје нови елемент на почетак листе.
Погледајмо пример који показује употребу функција пусх_бацк и пусх_фронт.
#include #include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3}; cout<<'List elements are: '; printlist(mylist); mylist.push_front(0); mylist.push_back(5); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Излаз:
Елементи листе су: 1 1 2 3
Садржај листе након пусх_фронт и пусх_бацк: 0 1 1 2 3 5
У овом примеру прво креирамо и набрајамо сва два елемента, по један напред и позади, користећи функције пусх_фронт и пусх_бацк. Излаз приказује промијењену листу након извршавања обје функције.
- поп_бацк :Уклања последњи елемент са листе чиме се смањује величина листе за 1.
- поп_фронт :Уклања први елемент са листе чиме се смањује величина листе за 1.
Следећи пример приказује употребу поп_бацк и поп_фронт операција листе.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); mylist.pop_front(); mylist.pop_back(); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Излаз:
најбољи шпијунски софтвер за андроид мобилне телефоне
Елементи листе су: 1 1 2 3 5
Садржај листе након пусх_фронт и пусх_бацк: 1 2 3
Као што је описано у дефиницији операција, свака од операција поп_фронт и поп_бацк уклања елемент са предње и задње стране листе, тј. Први и последњи елемент листе, што значи да сваки пут смањује величину листе за 1.
- величина :Враћа величину листе, тј. Број елемената на листи.
- празна :Проверава да ли је листа празна.
- избрисати :Уклања елемент или опсег елемената са листе.
- јасно :Уклања све елементе са листе тако што ће га променити у величину 0.
Дати доле је пример који демонстрира употребу свих горе наведених функција, тј. Величина, празно, брисање и брисање.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'size of the list: '< Излаз:
Елементи листе су: 1 1 2 3 5
величина листе: 5
Листа након брисања првог елемента: 1 2 3 5
Нова величина листе: 4
величина листе након брисања: 0
Горњи програм демонстрира све четири функције повезане са капацитетом листе. Видимо да се величина листе смањује за 1 када избришемо 1 елемент листе. Иако када на листи позовемо јасну операцију, величина је 0, што значи да су сви елементи са листе уклоњени.
- предњи :Враћа вредност првог елемента листе.
- назад :Враћа вредност последњег елемента листе.
- свап :Мења садржај једне листе са садржајем друге листе исте величине и типа.
- обрнуто :Алгоритам који преокреће листу.
- врста :Сортира дату листу.
Пример у наставку приказује употребу предњих, задњих, наличја, функција сортирања и замене.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'
Front of the list: '< Излаз:
Елементи листе су: 1 1 2 3 5
Предња страна листе: 1
Позадина листе: 5
Обрнута листа: 5 3 2 1 1
Садржај непарне листе: 1 3 5 7 9
Након замене
моја листа: 1 3 5 7 9
Оддлист: 5 3 2 1 1
У овом коду прво исписујемо предњу и задњу вредност листе милист. Тада се ова листа преокреће и обрнута листа се штампа. Након тога дефинишемо још једну листу непарних бројева која није у било ком редоследу и позивамо алгоритам „Сортирај“ да бисмо сортирали ову листу. Затим заменимо две листе помоћу функције размене и одштампамо размењене листе.
- спајање :Ова функција се користи за пренос садржаја једне листе на другу листу на одређеном месту.
Обе листе морају бити истог типа.
спој (положај, листа);
где,
поситион => Позиција на коју ће се преносити садржај листе.
лист => Листа чији елементи се преносе.
Следећи пример приказује употребу функције спајања.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 8,13}; cout<<'List elements are: '; printlist(mylist); list seclist = {2,3,5}; cout<<'list to be spliced: '; printlist(seclist); list:: iterator it = mylist.begin(); it ++; it++; mylist.splice(it,seclist); cout<<'
List contents after splicing at position 2: '; printlist(mylist); }
Излаз:
Елементи листе су: 1 1 8 13
списак за спајање: 2 3 5
Садржај листе након спајања на положају 2: 1 1 2 3 5 8 13
Тхе пример показује да користимо две листе. Прво се итератор за моју листу премешта на две позиције, а затим се позива функција спајања за пренос садржаја друге листе на трећу позицију прве листе.
- иди :За разлику од функције спајања која се може користити за пренос садржаја једне листе на другу на одређеној позицији, операција спајања директно спаја две листе да би се формирала једна једина листа. За спајање, обе листе морају бити поредане.
Дати доле је пример за демонстрирање функције спајања.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1,2,3,5,8}; list seclist = {4,6,7}; cout<<'First List: '; printlist(mylist); cout< Излаз:
Прва листа: 11 2 3 5 8
Друга листа: 4 6 7
Садржај листе након спајања две листе:
1 1 2 3 4 5 6 7 8
Тако у горњем програму имамо две листе које су сортиране. На ове две листе називамо операцију спајања. Резултујућа листа је сортирана листа која садржи елементе обе листе.
Закључак
Дошли смо до краја овог водича о Листама у СТЛ-у. Надамо се да би вам овај водич пружио неизмерно знање о листама у СТЛ-у.
=> Погледајте овде да бисте видели А-З Ц ++ туторијала за обуку овде.
Препоручено читање
- Редослед приоритета у СТЛ-у
- КАРТЕ У СТЛ
- СЕТ У СТЛ
- Низови и редови у СТЛ-у
- Питхон листа - Креирајте, приступите, исеците, додајте или избришите елементе
- Константе у Ц ++
- Објекти датотеке ВБСцрипт: ЦопиФиле, ДелетеФиле, ОпенТектФиле, читање и писање текстуалне датотеке
- Листе иницијализатора у језику Ц ++