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()와 유사합니다.