전제 조건: C++의 벡터
벡터는 요소가 삽입되거나 삭제될 때 자동으로 크기를 조정하고 해당 저장 공간을 컨테이너에서 자동으로 처리하는 기능을 갖춘 동적 배열과 동일합니다.
벡터::지우기()
그만큼 분명한() 함수는 벡터 컨테이너의 모든 요소를 제거하여 크기를 0으로 만드는 데 사용됩니다.
통사론:
vector_name .clear()>
매개변수: 매개변수가 전달되지 않습니다.
결과: 벡터의 모든 요소가 제거(또는 파괴)됩니다.
예:
Input: myvector= {1, 2, 3, 4, 5}; myvector.clear(); Output: myvector= {}>
C++
// C++ program to demonstrate> // Implementation of clear() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >마이벡터;> > myvector.push_back(1);> > myvector.push_back(2);> > myvector.push_back(3);> > myvector.push_back(4);> > myvector.push_back(5);> > // Vector becomes 1, 2, 3, 4, 5> > myvector.clear();> > // vector becomes empty> > // Printing the vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>
산출
No Output>
시간 복잡도: 에)
보조 공간: 오(1)
모든 요소는 하나씩 파괴됩니다.
오류 및 예외
- 예외 발생 보장이 없습니다.
- 매개변수가 전달되면 오류가 표시됩니다.
벡터::지우기()
삭제() 함수는 지정된 위치나 범위의 컨테이너에서 요소를 제거하는 데 사용됩니다.
통사론:
vector_name . erase( position ) ; for deletion at specific position vector_name . erase( starting_position , ending_position ) ; // for deletion in range>
매개변수:
- 반복자 형태로 제거할 요소의 위치입니다.
- 범위는 시작 및 끝 반복자를 사용하여 지정됩니다.
결과: 컨테이너의 지정된 위치에서 요소가 제거됩니다.
예:
Input : myvector= {1, 2, 3, 4, 5}, iterator= myvector.begin()+2 myvector.erase(iterator); Output : 1, 2, 4, 5 Input : myvector= {1, 2, 3, 4, 5, 6, 7, 8}, iterator1= myvector.begin()+3, iterator2= myvector.begin()+6 myvector.erase(iterator1, iterator2); Output : 1, 2, 3, 7, 8>
풀이 안 요소 ㅏ 특정 위치
예:
C++
// C++ program to demonstrate> // working of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >마이벡터{ 1, 2, 3, 4, 5 };> > vector<> int> >::반복자 it;> > it = myvector.begin();> > myvector.erase(it);> > // Printing the Vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>산출
역방향 문자열 자바
2 3 4 5>
시간 복잡도: 에)
보조 공간: 오(1)
특정 요소 제거
값을 기준으로 특정 요소를 삭제하려면 먼저 해당 요소의 위치를 알아야 하며 find() 함수를 사용하여 찾을 수 있습니다.
예:
C++
// C++ program to remove element based on its value> #include> using> namespace> std;> int> main()> {> > vector<> int> >벡터 = {1, 2, 3, 3, 4, 5 };> > cout <<> 'vector before deleting '> << endl;> > for> (> auto> element : vector) {> > cout << element <<> ' '> ;> > }> > // finding the position of the element in the vector> > int> valueToBeDeleted = 3;> > auto> it = find(vector.begin(), vector.end(),> > valueToBeDeleted);> > if> (it != vector.end()) {> > vector.erase(it);> > }> > cout << endl> > <<> 'Vector after deleting valueToBeDeleted '> > << endl;> > for> (> auto> element : vector) {> > cout << element <<> ' '> ;> > }> > cout << endl;> > return> 0;> }> |
>
>산출
vector before deleting 1 2 3 3 4 5 Vector after deleting valueToBeDeleted 1 2 3 4 5>
범위 내의 요소 제거
C++
// C++ program to demonstrate> // Implementation of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >마이벡터{ 1, 2, 3, 4, 5 };> > vector<> int> >::반복자 it1, it2;> > it1 = myvector.begin();> > it2 = myvector.end();> > it2--;> > it2--;> > myvector.erase(it1, it2);> > // Printing the Vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>산출
4 5>
시간 복잡도: 에)
보조 공간: 오(1)
벡터 쌍 요소 제거
예:
C++
#include> using> namespace> std;> // Function to print vector pair elements> void> print(vectorint, string>>& 것) { cout<< '['; for (int i = 0; i cout << '{' << vec[i].first << ',' << vec[i].second << '}'; if (i cout << ', '; } cout << ']' << endl; } int main() { vectorint, string>> x = { { 1, '사과' }, { 2, '바나나' }, { 3, '체리' }, { 4, '구아바' } }; // 위치 1(인덱스 0)의 요소를 제거합니다. x.erase(x.begin()); 인쇄(x); // 인쇄 [{2,banana}, {3,cherry}, {4,Guava}] // 위치 0과 1(인덱스 0과 // 및 1)에 있는 요소를 제거합니다. x.erase(x.begin(), x.begin() + 2); 인쇄(x); // 인쇄 [{4,Guava}] // 벡터를 지웁니다. x.clear(); 인쇄(x); // 아무것도 인쇄하지 않음(빈 괄호만) return 0; } // 이 코드는 Susobhan Akhuli가 제공한 것입니다.> |
>
>산출
[{2,banana}, {3,cherry}, {4,Guava}] [{4,Guava}] []>
시간 복잡도: 에)
보조 공간: 오(1)
오류 및 예외
- 위치가 유효한 경우 예외 발생 보장이 없습니다.
- 그렇지 않으면 정의되지 않은 동작을 표시합니다.
애플리케이션
정수 목록이 주어지면 벡터에서 모든 짝수 요소를 제거하고 벡터를 인쇄합니다.
입력:
1, 2, 3, 4, 5, 6, 7, 8, 9>
산출:
1 3 5 7 9>
설명: 2, 4, 6, 8은 짝수이고 벡터에서 지워집니다.
연산
- 벡터 크기에 맞춰 루프를 실행합니다.
- 각 위치의 요소가 2로 나누어지는지 확인하고, 그렇다면 요소를 제거하고 반복자를 줄입니다.
- 최종 벡터를 인쇄합니다.
아래 프로그램은 위의 접근 방식을 구현합니다.
C++
// C++ program to demonstrate> // Application of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector<> int> >마이벡터{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };> > for> (> auto> i = myvector.begin(); i != myvector.end();> > ++i) {> > if> (*i % 2 == 0) {> > myvector.erase(i);> > i--;> > }> > }> > // Printing the vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout <<> ' '> << *it;> > return> 0;> }> |
>
>산출
1 3 5 7 9>
시간 복잡도: 최악의 경우 O(N)은 삭제에 선형 시간이 걸리기 때문입니다.
Clear() vs erasure(), 언제 무엇을 사용하나요?
분명한() 벡터 컨테이너에서 모든 요소를 제거하여 크기를 0으로 만듭니다. 벡터의 모든 요소는 다음을 사용하여 제거됩니다. 분명한() 기능.
삭제() 반면에 함수는 컨테이너에서 특정 요소를 제거하거나 컨테이너에서 요소 범위를 제거하여 제거된 요소 수만큼 크기를 줄이는 데 사용됩니다.