Menu
CoddyTech

알고리즘 수정

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 1

move() 메서드

이 메서드는 현재 컨테이너에서 요소를 이동시키고 해당 요소의 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 3

reverse() 메서드

이 메서드는 컨테이너 요소의 순서를 반대로 뒤집으며, 더 정확하게는 두 반복자 범위 내의 순서를 뒤집습니다.

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++ 컴파일러