알고리즘 수정
Coddy의 C++ - 표준 템플릿 라이브러리 코스 레슨. 23개 중 21번째.
이 레슨에서는 C++ STL에 포함된 수정 알고리즘(modifying algorithms)에 대해 배웁니다.
수정 알고리즘은 컨테이너 내 요소의 값을 변경하도록 설계되었습니다.
다음과 같은 알고리즘들을 다룰 예정입니다:
copy()fill()move()swap()reverse()
copy() 메서드
copy() 메서드는 정의된 두 반복자(iterator) 범위의 요소들을 세 번째 반복자로 시작하는 범위로 복사합니다.
vector<int> v1 = {1, 2, 3};
vector<int> v2;
copy(v1.begin(), v1.end(), v2.begin());
for(auto value : v1)
cout << value << " ";Output:
1 2 3우리는 copy() 메서드를 사용하여 벡터 v1의 내용을 벡터 v2로 복사했습니다.
fill() 메서드
이 메서드는 두 반복자로 정의된 주어진 범위의 모든 요소에 지정된 값을 할당합니다.
vector<int> numbers(10); // 10개의 요소를 가진 빈 벡터를 생성합니다
fill(numbers.begin(), numbers.end(), 1);
for(auto value : numbers)
cout << value << " ";
cout << endl;
fill(numbers.begin(), numbers.end() - 3, 2);
for(auto value : numbers)
cout << value << " ";Output:
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 1 1 1move() 메서드
이 메서드는 현재 컨테이너에서 요소를 이동시키고 해당 요소의 rvalue를 반환합니다.
vector<string> names;
string first = "John";
string second = "Max";
names.push_back(first);
names.push_back(move(second));
cout << first << endl;
cout << second << endl;
cout << names[1];Output:
John
Max보시다시피, move() 메서드는 문자열을 비우지만 그 값을 반환하며, push_back() 메서드는 그 값을 벡터에 삽입합니다.
swap() 메서드
이 메서드는 동일한 타입의 두 컨테이너의 요소를 서로 바꿉니다.
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
for(auto value : v1)
cout << value << " ";
for(auto value : v2)
cout << value << " ";
cout << endl;
swap(v1, v2);
for(auto value : v1)
cout << value << " ";
for(auto value : v2)
cout << value << " ";Output:
1 2 3 4 5 6
4 5 6 1 2 3reverse() 메서드
이 메서드는 컨테이너 요소의 순서를 반대로 뒤집으며, 더 정확하게는 두 반복자 범위 내의 순서를 뒤집습니다.
vector<int> a = {1, 2, 3, 4, 5};
for(auto value : a)
cout << value << " ";
cout << endl;
reverse(a.begin(), a.end());
for(auto value : a)
cout << value << " ";Output:
1 2 3 4 5
5 4 3 2 1
직접 해보기
이 레슨에는 코드 챌린지가 없습니다.
C++ - 표준 템플릿 라이브러리의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러