Ц++ Вецтор Цлеар вс Ерасе

C Vector Clear Vs Erase



Ц++ вектор има много функција чланова. Два од њих су цлеар() и ерасе(). јасно() „уклања“ све елементе вектора. ерасе() „уклања“ један елемент или низ елемената. Постоје две преоптерећене варијанте функције члана ерасе() за вектор.

Наслов овог чланка је заправо „Вецтор цлеар() Мембер Фунцтион версус Вецтор ерасе() Мембер Фунцтион, ин Ц++“. Ово је поређење двочланих функција. Она се бави тиме када да се користи, како да се користи, и под којим условима се користи било који.







Да бисте користили вектор у Ц++ програму, програм треба да почне са:



#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;

Садржај чланка

Вектор цлеар()

Чланска функција цлеар() „уклања“ све елементе вектора. Његова синтакса је:



празнина јасно ( )

Враћа се празнина. Следећи програм илуструје његову употребу, са изразом „втр.цлеар();“:





#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;



инт главни ( )

{

вектор < цхар > втр = { 'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН' } ;



за ( вектор < цхар > :: итератор то = втр. започети ( ) ; то ! = втр. крај ( ) ; то ++ )

цоут << * то << '' ;

цоут << ендл ;



втр. јасно ( ) ;



за ( вектор < цхар > :: итератор то = втр. започети ( ) ; то ! = втр. крај ( ) ; то ++ )

цоут << * то << '' ;

цоут << ендл ;



повратак 0 ;

}

Излаз је један ред:

П К Р С Т У

Да вектор није обрисан, излаз би биле две линије истог низа. Други ред није приказан јер су сви елементи обрисани.



цонст вектор и цлеар()

Када декларацији вектора претходи цонст, то значи да се елементи вектора не могу брисати или мењати. Ако израз покуша да промени или избрише било који од елемената, програм се неће компајлирати. Тестирајте следећи програм и имајте на уму да се не компајлира:

#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;



инт главни ( )

{

конст вектор < цхар > втр = { 'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН' } ;



за ( вектор < цхар > :: цонст_итератор то = втр. започети ( ) ; то ! = втр. крај ( ) ; то ++ )

цоут << * то << '' ;

цоут << ендл ;



втр. јасно ( ) ;



за ( вектор < цхар > :: цонст_итератор то = втр. започети ( ) ; то ! = втр. крај ( ) ; то ++ )

цоут << * то << '' ;

цоут << ендл ;



повратак 0 ;

}

Да је програм тестиран, појавила би се порука о грешци и не би било компилације. Пошто је вектор проглашен константним, функција цлеар() није могла да ради, што је резултирало поруком о грешци од компајлера.

Белешка: цлеар() брише све елементе вектора. У ствари, он означава све елементе као избрисане, тако да други кодови могу заузети своје меморијске локације. Ако меморијску локацију било ког елемента још није заузео други код, онда се елемент и даље може поново користити у име истог вектора.

Вецтор Ерасе

Поједностављене синтаксе за две функције члана ерасе() су:

а. обрисати ( к )

и

а. обрисати ( к1,к2 )

где је а назив вектора.

итератор ерасе(цонст_итератор поситион)

Ово је пуна синтакса за „а.ерасе(к)“. Враћа итератор који показује на елемент који је био одмах иза оног избрисаног. Аргумент к је итератор који указује на елемент који треба обрисати. Следећи програм то илуструје:

#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;



инт главни ( )

{

вектор < цхар > втр = { 'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН' } ;



вектор < цхар > :: итератор итер = втр. започети ( ) ;

++ итер ; ++ итер ;



вектор < цхар > :: итератор то = втр. обрисати ( итер ) ;



за ( инт и = 0 ; и < втр. величина ( ) ; и ++ ) {

цоут << втр [ и ] << '' ;

}

цоут << ендл ;



цоут << * то << ендл ;



повратак 0 ;

}

Излаз је:

П К С Т У

С

„Р“ је избрисано. Враћени итератор сада показује на 'С', што је било одмах иза 'Р'. Функција-члан, бегин(), враћа итератор који указује на први елемент вектора. У коду је овај итератор увећан два пута да би показао на „Р“. „Р“ је избрисан са изразом „втр.ерасе(итер)“.

Распон у вектору

За листу,

'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН'

секвенца, 'К', 'Р', 'С', 'Т' је опсег. Међутим, код Ц++ контејнера, последњи елемент, „Т“ се не сматра делом опсега. Ово је уопштено назначено као:

[ и, ј )

или

[ к1, к2 )

„[“ у овом случају значи да је први елемент у низу укључен, а „)“ значи да последњи елемент није укључен.

итератор ерасе (конст_итератор први, цонст_итератор последњи)

Ово је пуна синтакса за „а.ерасе(к1,к2)“. Враћа итератор који показује на елемент који је био одмах иза обрисаног опсега. Напомена: последњи елемент у опсегу се не брише. Дакле, враћени итератор ће показати на последњи елемент опсега. Аргументи к1 и к2 су итератори који указују на први и последњи елемент опсега. Следећи програм то илуструје:

#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;



инт главни ( )

{

вектор < цхар > втр = { 'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН' } ;



вектор < цхар > :: итератор итБ = втр. започети ( ) ;

++ итБ ;

вектор < цхар > :: итератор итЕ = втр. крај ( ) ;

-- итЕ ; -- итЕ ;



вектор < цхар > :: итератор то = втр. обрисати ( итБ, итЕ ) ;



за ( инт и = 0 ; и < втр. величина ( ) ; и ++ ) {

цоут << втр [ и ] << '' ;

}

цоут << ендл ;



цоут << * то << ендл ;



повратак 0 ;

}

Излаз је:

П Т У

Т

„К“, „Р“, „С“ су избрисани. Враћени итератор сада показује на 'Т', који је био последњи елемент у опсегу контејнера. Функција-члан, енд(), враћа итератор који показује одмах иза последњег елемента вектора. У коду, овај итератор је смањен два пута да би показао на „Т“, последњи елемент опсега. „К“, „Р“, „С“ су избрисани без последњег елемента, „Т“ у опсегу, са изразом „втр.ерасе(итБ, итЕ)“.

цонст вектор и ерасе()

Ако се декларацији вектора претходи цонст, за константу, онда ниједан његов елемент не може бити обрисан. Следећи програм неће компајлирати, издајући поруку о грешци за израз а.ерасе(к):

#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;



инт главни ( )

{

конст вектор < цхар > втр = { 'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН' } ;



вектор < цхар > :: цонст_итератор итер = втр. започети ( ) ;

++ итер ; ++ итер ;



вектор < цхар > :: цонст_итератор то = втр. обрисати ( итер ) ;



за ( инт и = 0 ; и < втр. величина ( ) ; и ++ ) {

цоут << втр [ и ] << '' ;

}

цоут << ендл ;



цоут << * то << ендл ;



повратак 0 ;

}

Да је читалац пробао програм, добио би поруку о грешци. Програм не би био састављен.

Следећи програм неће компајлирати, издајући поруку о грешци за израз а.ерасе(к1,к2):

#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;



инт главни ( )

{

конст вектор < цхар > втр = { 'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН' } ;



вектор < цхар > :: цонст_итератор итБ = втр. започети ( ) ;

++ итБ ;

вектор < цхар > :: цонст_итератор итЕ = втр. крај ( ) ;

-- итЕ ; -- итЕ ;



вектор < цхар > :: цонст_итератор то = втр. обрисати ( итБ, итЕ ) ;



за ( инт и = 0 ; и < втр. величина ( ) ; и ++ ) {

цоут << втр [ и ] << '' ;

}

цоут << ендл ;



цоут << * то << ендл ;



повратак 0 ;

}

Напомена: ерасе() брише елемент или опсег елемената. У ствари, он означава елемент као избрисан, тако да њихове меморијске локације могу да заузму други кодови. Ако меморијску локацију било ког елемента још није заузео други код, онда се елемент и даље може поново користити у име истог вектора.

поп_бацк()

Векторска функција члана поп_бацк() је врста функције ерасе(). Међутим, брише само последњи елемент вектора. Синтакса је:

празнина поп_бацк ( )

Не узима аргументе и враћа се ништавним. Следећи програм илуструје његову употребу:

#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;



инт главни ( )

{

вектор < цхар > втр = { 'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН' } ;



втр. поп_бацк ( ) ;



за ( инт и = 0 ; и < втр. величина ( ) ; и ++ ) {

цоут << втр [ и ] << '' ;

}

цоут << ендл ;



повратак 0 ;

}

Излаз је:

П К Р С Т

Последњи елемент, „У“ је уклоњен (избрисан).

Уништавање вектора

Може ли се вектор уништити? - Да! Међутим, када се вектор уништи, сви његови елементи се бришу осим његовог имена; што значи да се декларација вектора и даље може поново користити, али са извесном несигурношћу. Синтакса за уништавање вектора је:

а.~Кс ( )

где је 'а' име вектора. Следећи програм то илуструје:

#инцлуде <вектор>

#инцлуде <иостреам>

Користећи именског простора стд ;



инт главни ( )

{

вектор < цхар > втр = { 'П' , 'К' , 'Р' , 'С' , 'Т' , 'ИН' } ;



втр.~вектор ( ) ;



втр = { 'ИН' , 'ИН' , 'ИКС' , 'И' , 'ВИТХ' } ;



за ( инт и = 0 ; и < втр. величина ( ) ; и ++ ) {

цоут << втр [ и ] << '' ;

}

цоут << ендл ;



втр.~вектор ( ) ;



втр. потисне ( 'А' ) ;

втр. потисне ( 'Б' ) ;

втр. потисне ( 'Ц' ) ;

втр. потисне ( 'Д' ) ;

втр. потисне ( 'И' ) ;



за ( инт и = 0 ; и < втр. величина ( ) ; и ++ ) {

цоут << втр [ и ] << '' ;

}

цоут << ендл ;

повратак 0 ;

}

Излаз је:

В В Кс И З
стр ^ т е @ А  Ц Д Е

са ауторовог рачунара, са неким непоузданим ликовима за други ред.

Закључак

Функција векторског члана цлеар() може се упоредити са функцијом члана вектора ерасе(). Они нису замене. цлеар() брише све елементе вектора. У ствари, он означава све елементе као избрисане, тако да њихове меморијске локације могу да заузму други кодови. Ако меморијску локацију било ког елемента још није заузео други код, онда се елемент и даље може поново користити у име истог вектора. ерасе() брише елемент или опсег елемената. У ствари, он означава елемент као избрисан, тако да меморијску локацију може заузети други код. Ако меморијска локација било ког избрисаног елемента још није заузета другим кодом, онда се елемент и даље може поново користити у име истог вектора. цлеар има сличност са уништавањем, ~Кс().