English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C ++ set erase())함수는 주어진 키와 연관된 단일 요소 또는 요소 범위([first, last)를 set 컨테이너에서 지우기 위해 사용됩니다. 따라서 요소의 수를 통해 크기를 줄입니다。
void erase(iterator position); //C++ 11 이전 size_type erase(const value_type& val); //C++ 11 이전 void erase(iterator first, iterator last); //C++ 11 이전 iterator erase(const_iterator position); //C++ 11시작 size_type erase(const value_type& val); //C++ 11시작 iterator erase(const_iterator first, const_iterator last); //C++ 11시작
position:집합에서 지우려는 단일 요소를 가리키는 이터레이터
val:집합에서 지우려는 값
first:지우려는 범위의 시작
last:지우려는 범위의 끝
이 함수는 지워진 요소의 다음 요소에 대한 이터레이터를 반환하거나, 지워진 요소의 수를 반환합니다。
erase(position):摊销常数
erase(val):컨테이너 크기의 로그
erase(first,last):처음과 마지막의 거리는 선형입니다。
이터레이터, 참조 및 이 함수로 지워진 요소를 가리키는 포인터는 무효가 됩니다。
모든 다른 이터레이터, 포인터 및 참조는 그 효력을 유지합니다。
컨테이너가 변경되었습니다。
지워진 요소는 변경됩니다. 다른 요소에 대한 동시 접근은 안전하지만, 컨테이너에서 이터레이션 범위는 안전하지 않습니다。
이 함수는 예외를 발생시키지 않습니다。
잘못된 범위나 위치를 지정하면 정의되지 않은 행동이 발생할 수 있습니다。
이제 이터레이터로 요소를 지우는 간단한 예제를 보여드리겠습니다。
#include <iostream> #include <set> using namespace std; int main () { set<int> myset; set<int>::iterator it; myset = { 10,20,30 } ; cout << "요소를 제거하기 전:\n"; for (it = myset.begin(); it != myset.end(); ++it) cout << *it << '\n'; it=myset.find('b'); myset.erase(*it); // 이터레이터로 지우기 cout<<"\n요소를 지우고 나서: \n"; for (it = myset.begin(); it != myset.end(); ++it) cout << *it << '\n'; return 0; }
출력:
요소를 제거하기 전: 10 20 30 요소를 지우고 나서: 10 20 30
위의 예제에서 요소는 이터레이터로 지워졌습니다。
이제 주어진 키 값으로 집합에서 요소를 지우는 간단한 예제를 보여드리겠습니다:
#include <iostream> #include <set> using namespace std; int main() { set<int> myset; set<int>::iterator it; myset = {10, 20, 30, 40}); cout << "요소를 제거하기 전:\n"; for (it = myset.begin(); it != myset.end(); ++it){ cout << *it<<'\n'; } myset.erase(30);//지정된 값을 지우는 것 cout << "\n요소를 제거한 후:\n"; for (it = myset.begin(); it != myset.end(); ++it){ cout << *it<<'\n'; } return 0; }
출력:
요소를 제거하기 전: 10 20 30 40 요소를 제거한 후: 10 20 40
위의 예제에서 erase(value) 함수는 집합의 값으로30。
이제 간단한 예제를 보여드리겠습니다. 주어진 범위로 요소를 지우는 것을 보여드리겠습니다:
#include <iostream> #include <set> using namespace std; int main () { set<int> myset; set<int>::iterator it; myset = { 10, 20, 30 }; cout << "요소를 제거하기 전:\n"; cout << "Size is: " << myset.size() << '\n'; for (it = myset.begin(); it != myset.end(); ++it){ cout << *it << '\n'; } myset.erase(myset.begin(), myset.end()); // 지정된 범위를 지우기 cout << "\n요소를 제거한 후:\n"; cout << "Size is: " << myset.size(); for (it = myset.begin(); it != myset.end(); ++it){ cout << *it << '\n'; } return 0; }
출력:
요소를 제거하기 전: Size is: 3 10 20 30 요소를 제거한 후: Size is: 0
위 예제에서는 Erase(first, last) 함수를 사용하여 지정된 범위(즉 시작부터 끝까지)의 요소를 지우었습니다.
m에서 모든 홀수를 제거하는 간단한 예제를 보겠습니다:
#include <set> #include <iostream> using namespace std; int main() { set<int> m = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; // m에서 모든 홀수를 제거 cout << "홀수를 제거한 후 요소는:\n \t "; for (auto it = m.begin(); it != m.end();){ if (*it %% 2 == 1{ it = m.erase(it); } else { ++it; } } for (auto& p : m) { cout << p << ", "; } }
출력:
홀수를 제거한 후 요소는: 2, 4, 6, 8, 10, 12, 14,
위 예제에서 모든 홀수가 제거되었으며 짝수가 표시되었습니다.
다른 예제를 보겠습니다:
#include <set> #include <string> #include <iostream> #include <iterator> // next()과 prev() 보조 함수 using namespace std; using myset = set<string>; void printset(const myset& s) { for (const auto& iter : s) { cout << " [" << iter << "]"; } cout << endl << "size() == " << s.size() << endl << endl; } int main() { myset s1; // 데이터를 입력하여 테스트합니다, 하나씩 s1.insert("Bob"); s1.insert("Robert"); s1.insert("Bert"); s1.insert("Rob"); s1.insert("Bobby"); cout << "집합 s1의 시작 데이터는: " << endl; printset(s1); // 의 첫 번째 멤버 함수는 주어진 위치의 요소를 제거합니다 s1.erase(next(s1.begin())); cout << "삭제 번호가 "2요소 후, 집합 s1이":" << endl; printset(s1); // 초기화자 목록을 사용하여 하나의 데이터를 한 번에 입력합니다 myset s2{ "meow", "hiss", "purr", "growl", "yowl" }; cout << "집합 s2의 시작 데이터는: " << endl; printset(s2); // 의 두 번째 멤버 함수는 요소를 제거합니다 // 범위 [First, Last) s2.erase(next(s2.begin()), prev(s2.end())); cout << "중간 요소를 제거한 후, 집합 s2이":" << endl; printset(s2); myset s3; // 하나의 데이터를 사용하여 테스트 데이터를 한 번에 입력합니다 s3.emplace("C"); s3.emplace("C#"); s3.emplace("D"); s3.emplace("D#"); s3.emplace("E"); s3.emplace("E#"); s3.emplace("F"); s3.emplace("F#"); s3.emplace("G"); s3.emplace("G#"); s3.emplace("A"); s3.emplace("A#"); s3.emplace("B"); cout << "집합 s3의 시작 데이터는: " << endl; printset(s3); // 의 세 번째 멤버 함수는 주어진 키를 가진 요소를 제거합니다 myset::size_type count = s3.erase("E#"); // 의 세 번째 멤버 함수도 제거된 요소 수를 반환합니다 cout << "s3에서 제거된 요소 수는: " << count << "." << endl; cout << "삭제 키가 "E#"인 요소 후, 집합 s3이":" << endl; printset(s3); }
출력:
集合s1의 시작 데이터는: [Bert] [Bob] [Bobby] [Rob] [Robert] size() == 5 번 요소를 제거한 후2요소 후, 집합 s1위치: [Bert] [Bobby] [Rob] [Robert] size() == 4 集合s2의 시작 데이터는: [growl] [hiss] [meow] [purr] [yowl] size() == 5 중간 요소를 제거한 후, 집합s2위치: [growl] [yowl] size() == 2 集合s3的开始数据为: [A] [A#] [B] [C] [C#] [D] [D#] [E] [E#] [F] [F#] [G] [G#] size() == 13 从s3中删除的元素数量为: 1. 키值为“E#”的元素删除后,集合s3위치: [A] [A#] [B] [C] [C#] [D] [D#] [E] [E#] [F] [F#] [G] [G#] size() == 12