C++ 벡터 지우기 및 지우기

C Begteo Jiugi Mich Jiugi



C++ 벡터에는 많은 멤버 함수가 있습니다. 그 중 두 개는 클리어()와 지우기(). 분명한() 벡터의 모든 요소를 ​​'제거'합니다. erasure()는 단일 요소 또는 요소 범위를 '제거'합니다. 벡터에 대한 erasure() 멤버 함수에는 두 가지 오버로드된 변형이 있습니다.

이 기사의 제목은 실제로 'C++의 Vectorclear() 멤버 함수와 Vector erasure() 멤버 함수'입니다. 이것은 두 멤버 함수의 비교입니다. 언제, 어떻게, 어떤 조건에서 어떤 것을 사용해야 하는지 다룹니다.







C++ 프로그램에서 벡터를 사용하려면 프로그램은 다음으로 시작해야 합니다.



#include <벡터>

#include

사용하여 네임스페이스 성병 ;

기사 내용

벡터 클리어()

Clear() 멤버 함수는 벡터의 모든 요소를 ​​'제거'합니다. 구문은 다음과 같습니다.



무효의 분명한 ( )

무효를 반환합니다. 다음 프로그램은 'vtr.clear();' 표현식을 사용하여 그 사용법을 보여줍니다.





#include <벡터>

#include

사용하여 네임스페이스 성병 ;



정수 기본 ( )

{

벡터 < > VTR = { '피' , '큐' , '아르 자형' , '에스' , '티' , '안에' } ;



~을 위한 ( 벡터 < > :: 반복자 그것 = vtr. 시작하다 ( ) ; 그것 ! = vtr. ( ) ; 그것 ++ )

시합 << * 그것 << ' ' ;

시합 << ;



vtr. 분명한 ( ) ;



~을 위한 ( 벡터 < > :: 반복자 그것 = vtr. 시작하다 ( ) ; 그것 ! = vtr. ( ) ; 그것 ++ )

시합 << * 그것 << ' ' ;

시합 << ;



반품 0 ;

}

출력은 한 줄입니다.

P Q R S T U

벡터가 지워지지 않았다면 출력은 동일한 시퀀스의 두 줄이 되었을 것입니다. 모든 요소가 지워졌기 때문에 두 번째 줄은 표시되지 않았습니다.

const 벡터와 클리어()

벡터 선언 앞에 const가 있으면 벡터의 요소를 삭제하거나 변경할 수 없음을 의미합니다. 표현식이 요소 중 하나를 변경하거나 삭제하려고 하면 프로그램이 컴파일되지 않습니다. 다음 프로그램을 테스트하고 컴파일되지 않음을 확인합니다.

#include <벡터>

#include

사용하여 네임스페이스 성병 ;



정수 기본 ( )

{

const 벡터 < > VTR = { '피' , '큐' , '아르 자형' , '에스' , '티' , '안에' } ;



~을 위한 ( 벡터 < > :: const_iterator 그것 = vtr. 시작하다 ( ) ; 그것 ! = vtr. ( ) ; 그것 ++ )

시합 << * 그것 << ' ' ;

시합 << ;



vtr. 분명한 ( ) ;



~을 위한 ( 벡터 < > :: const_iterator 그것 = vtr. 시작하다 ( ) ; 그것 ! = vtr. ( ) ; 그것 ++ )

시합 << * 그것 << ' ' ;

시합 << ;



반품 0 ;

}

프로그램을 테스트했다면 오류 메시지가 표시되고 컴파일도 없었을 것입니다. 벡터가 상수로 선언되었기 때문에 Clear() 함수가 작동하지 않아 컴파일러에서 오류 메시지가 발생했습니다.

메모: Clear()는 벡터의 모든 요소를 ​​삭제합니다. 실제로 모든 요소를 ​​삭제된 것으로 표시하므로 다른 코드가 메모리 위치를 차지할 수 있습니다. 요소의 메모리 위치가 아직 다른 코드에 의해 사용되지 않은 경우 해당 요소는 동일한 벡터를 대신하여 계속 재사용될 수 있습니다.

벡터 지우기

두 erase() 멤버 함수에 대한 단순화된 구문은 다음과 같습니다.

ㅏ. 삭제 ( )

그리고

ㅏ. 삭제 ( q1,q2 )

여기서 a는 벡터의 이름입니다.

반복자 지우기(const_iterator 위치)

이것은 'a.erase(q)'의 전체 구문입니다. 지워진 요소 바로 뒤에 있는 요소를 가리키는 반복자를 반환합니다. 인수 q는 지워질 요소를 가리키는 반복자입니다. 다음 프로그램은 이를 보여줍니다.

#include <벡터>

#include

사용하여 네임스페이스 성병 ;



정수 기본 ( )

{

벡터 < > VTR = { '피' , '큐' , '아르 자형' , '에스' , '티' , '안에' } ;



벡터 < > :: 반복자 반복 = vtr. 시작하다 ( ) ;

++ 반복 ; ++ 반복 ;



벡터 < > :: 반복자 그것 = vtr. 삭제 ( 반복 ) ;



~을 위한 ( 정수 = 0 ; < vtr. 크기 ( ) ; ++ ) {

시합 << VTR [ ] << ' ' ;

}

시합 << ;



시합 << * 그것 << ;



반품 0 ;

}

출력은 다음과 같습니다

P Q S T U

에스

'R'이 삭제되었습니다. 반환된 반복자는 이제 'R' 바로 뒤에 있는 'S'를 가리킵니다. 멤버 함수인 start()는 벡터의 첫 번째 요소를 가리키는 반복자를 반환합니다. 코드에서 이 반복자는 'R'을 가리키도록 두 번 증가되었습니다. 'R'은 'vtr.erase(iter)'라는 표현으로 지워졌습니다.

벡터의 범위

목록의 경우,

'피' , '큐' , '아르 자형' , '에스' , '티' , '안에'

시퀀스 'Q', 'R', 'S', 'T'는 범위입니다. 그러나 C++ 컨테이너의 경우 마지막 요소 'T'는 범위의 일부로 간주되지 않습니다. 이는 일반적인 용어로 다음과 같이 표시됩니다.

[ 나, 제이 )

또는

[ q1, q2 )

이 경우 '['는 시퀀스의 첫 번째 요소가 포함됨을 의미하고, ')'는 마지막 요소가 포함되지 않음을 의미합니다.

반복자 지우기(const_iterator 먼저, const_iterator 마지막)

이것은 'a.erase(q1,q2)'의 전체 구문입니다. 지워진 범위 바로 뒤에 있는 요소를 가리키는 반복자를 반환합니다. 참고: 범위의 마지막 요소는 지워지지 않습니다. 따라서 반환된 반복자는 범위의 마지막 요소를 가리킵니다. 인수 q1 및 q2는 범위의 첫 번째 요소와 마지막 요소를 가리키는 반복자입니다. 다음 프로그램은 이를 보여줍니다.

#include <벡터>

#include

사용하여 네임스페이스 성병 ;



정수 기본 ( )

{

벡터 < > VTR = { '피' , '큐' , '아르 자형' , '에스' , '티' , '안에' } ;



벡터 < > :: 반복자 그것B = vtr. 시작하다 ( ) ;

++ 그것B ;

벡터 < > :: 반복자 그것 = vtr. ( ) ;

-- 그것 ; -- 그것 ;



벡터 < > :: 반복자 그것 = vtr. 삭제 ( 그것B, 그것E ) ;



~을 위한 ( 정수 = 0 ; < vtr. 크기 ( ) ; ++ ) {

시합 << VTR [ ] << ' ' ;

}

시합 << ;



시합 << * 그것 << ;



반품 0 ;

}

출력은 다음과 같습니다

PTU

'Q', 'R', 'S'가 삭제되었습니다. 반환된 반복자는 이제 컨테이너 범위의 마지막 요소인 'T'를 가리킵니다. 멤버 함수 end()는 벡터의 마지막 요소 바로 뒤를 가리키는 반복자를 반환합니다. 코드에서 이 반복자는 범위의 마지막 요소인 'T'를 가리키도록 두 번 감소되었습니다. 'Q', 'R', 'S'는 'vtr.erase(itB, itE)'라는 표현을 사용하여 범위의 마지막 요소인 'T' 없이 삭제되었습니다.

const 벡터 및 지우기()

벡터 선언 앞에 const(상수인 경우)가 있으면 해당 요소를 지울 수 없습니다. 다음 프로그램은 컴파일되지 않고 a.erase(q) 표현식에 대한 오류 메시지를 표시합니다.

#include <벡터>

#include

사용하여 네임스페이스 성병 ;



정수 기본 ( )

{

const 벡터 < > VTR = { '피' , '큐' , '아르 자형' , '에스' , '티' , '안에' } ;



벡터 < > :: const_iterator 반복 = vtr. 시작하다 ( ) ;

++ 반복 ; ++ 반복 ;



벡터 < > :: const_iterator 그것 = vtr. 삭제 ( 반복 ) ;



~을 위한 ( 정수 = 0 ; < vtr. 크기 ( ) ; ++ ) {

시합 << VTR [ ] << ' ' ;

}

시합 << ;



시합 << * 그것 << ;



반품 0 ;

}

독자가 프로그램을 시도했다면 오류 메시지를 받았을 것입니다. 프로그램이 컴파일되지 않았을 것입니다.

다음 프로그램은 컴파일되지 않고 a.erase(q1,q2) 표현식에 대한 오류 메시지를 표시합니다.

#include <벡터>

#include

사용하여 네임스페이스 성병 ;



정수 기본 ( )

{

const 벡터 < > VTR = { '피' , '큐' , '아르 자형' , '에스' , '티' , '안에' } ;



벡터 < > :: const_iterator 그것B = vtr. 시작하다 ( ) ;

++ 그것B ;

벡터 < > :: const_iterator 그것 = vtr. ( ) ;

-- 그것 ; -- 그것 ;



벡터 < > :: const_iterator 그것 = vtr. 삭제 ( 그것B, 그것E ) ;



~을 위한 ( 정수 = 0 ; < vtr. 크기 ( ) ; ++ ) {

시합 << VTR [ ] << ' ' ;

}

시합 << ;



시합 << * 그것 << ;



반품 0 ;

}

참고: erasure()는 요소 또는 요소 범위를 삭제합니다. 실제로 요소를 삭제된 것으로 표시하여 해당 요소의 메모리 위치를 다른 코드가 차지할 수 있습니다. 요소의 메모리 위치가 아직 다른 코드에 의해 사용되지 않은 경우 해당 요소는 동일한 벡터를 대신하여 계속 재사용될 수 있습니다.

팝백()

pop_back() 벡터 멤버 함수는 일종의 erasure() 함수입니다. 그러나 벡터의 마지막 요소만 삭제됩니다. 구문은 다음과 같습니다.

무효의 팝백 ( )

인수가 필요하지 않으며 void를 반환합니다. 다음 프로그램은 그 사용법을 보여줍니다.

#include <벡터>

#include

사용하여 네임스페이스 성병 ;



정수 기본 ( )

{

벡터 < > VTR = { '피' , '큐' , '아르 자형' , '에스' , '티' , '안에' } ;



vtr. 팝백 ( ) ;



~을 위한 ( 정수 = 0 ; < vtr. 크기 ( ) ; ++ ) {

시합 << VTR [ ] << ' ' ;

}

시합 << ;



반품 0 ;

}

출력은 다음과 같습니다

P Q R S T

마지막 요소인 'U'가 제거(삭제)되었습니다.

벡터 파괴

벡터가 파괴될 수 있나요? - 예! 그러나 벡터가 소멸되면 이름을 제외한 모든 요소가 지워집니다. 이는 벡터 선언을 계속 재사용할 수 있지만 약간의 불확실성이 있음을 의미합니다. 벡터를 파괴하는 구문은 다음과 같습니다.

a.~X ( )

여기서 'a'는 벡터의 이름입니다. 다음 프로그램은 이를 보여줍니다.

#include <벡터>

#include

사용하여 네임스페이스 성병 ;



정수 기본 ( )

{

벡터 < > VTR = { '피' , '큐' , '아르 자형' , '에스' , '티' , '안에' } ;



vtr.~벡터 ( ) ;



VTR = { '안에' , '안에' , '엑스' , '그리고' , '와 함께' } ;



~을 위한 ( 정수 = 0 ; < vtr. 크기 ( ) ; ++ ) {

시합 << VTR [ ] << ' ' ;

}

시합 << ;



vtr.~벡터 ( ) ;



vtr. push_back ( 'ㅏ' ) ;

vtr. push_back ( '비' ) ;

vtr. push_back ( '씨' ) ;

vtr. push_back ( '디' ) ;

vtr. push_back ( '그리고' ) ;



~을 위한 ( 정수 = 0 ; < vtr. 크기 ( ) ; ++ ) {

시합 << VTR [ ] << ' ' ;

}

시합 << ;

반품 0 ;

}

출력은 다음과 같습니다

V W X Y Z
^ t e @ A  C D E

두 번째 줄에는 신뢰할 수 없는 문자가 포함되어 있습니다.

결론

벡터 멤버 함수인clear()는 벡터 멤버 함수인 era()와 비교할 수 있습니다. 그것들은 대체물이 아닙니다. Clear()는 벡터의 모든 요소를 ​​삭제합니다. 실제로 모든 요소를 ​​삭제된 것으로 표시하므로 해당 요소의 메모리 위치를 다른 코드가 차지할 수 있습니다. 요소의 메모리 위치가 아직 다른 코드에 의해 사용되지 않은 경우 해당 요소는 동일한 벡터를 대신하여 계속 재사용될 수 있습니다. erasure()는 요소 또는 요소 범위를 삭제합니다. 실제로 요소를 삭제된 것으로 표시하므로 다른 코드가 메모리 위치를 차지할 수 있습니다. 삭제된 요소의 메모리 위치가 아직 다른 코드에서 사용되지 않은 경우 해당 요소는 동일한 벡터를 대신하여 계속 재사용될 수 있습니다. Clear는 destroy, ~X()와 유사합니다.