💡 퀵 접속: cpp.kr/rotate_copy
C++ 표준 라이브러리의 알고리즘으로, 주어진 범위의 요소들을 회전시켜서 다른 범위에 복사합니다. rotate_copy는 원본 범위를 수정하지 않고, 회전된 결과를 다른 범위에 복사합니다. 지정된 위치를 기준으로 왼쪽으로 회전된 결과가 복사됩니다.
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::vector<int> result;
std::cout << "원본 벡터: ";
for (int n : numbers) std::cout << n << " ";
std::cout << std::endl;
// 3번째 요소(3)를 기준으로 회전하여 복사
std::rotate_copy(numbers.begin(), numbers.begin() + 2, numbers.end(),
std::back_inserter(result));
std::cout << "회전하여 복사한 결과: ";
for (int n : result) std::cout << n << " ";
std::cout << std::endl;
std::cout << "원본 벡터는 변경되지 않음: ";
for (int n : numbers) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
실행 결과:
원본 벡터: 1 2 3 4 5 회전하여 복사한 결과: 3 4 5 1 2 원본 벡터는 변경되지 않음: 1 2 3 4 5
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string text = "Hello, World!";
std::string result;
std::cout << "원본 문자열: " << text << std::endl;
// 6번째 문자(쉼표)를 기준으로 회전하여 복사
std::rotate_copy(text.begin(), text.begin() + 5, text.end(),
std::back_inserter(result));
std::cout << "회전하여 복사한 결과: " << result << std::endl;
std::cout << "원본 문자열은 변경되지 않음: " << text << std::endl;
return 0;
}
실행 결과:
원본 문자열: Hello, World! 회전하여 복사한 결과: , World!Hello 원본 문자열은 변경되지 않음: Hello, World!
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
class Person {
std::string name;
int age;
public:
Person(const std::string& n, int a) : name(n), age(a) {}
void print() const {
std::cout << name << " (" << age << "세)" << std::endl;
}
};
int main() {
std::vector<Person> people = {
Person("Alice", 20),
Person("Bob", 30),
Person("Charlie", 25),
Person("David", 35),
Person("Eve", 22)
};
std::vector<Person> result;
std::cout << "원본 목록:" << std::endl;
for (const auto& person : people) {
person.print();
}
// Charlie를 기준으로 회전하여 복사
std::rotate_copy(people.begin(), people.begin() + 2, people.end(),
std::back_inserter(result));
std::cout << "\n회전하여 복사한 결과:" << std::endl;
for (const auto& person : result) {
person.print();
}
std::cout << "\n원본 목록은 변경되지 않음:" << std::endl;
for (const auto& person : people) {
person.print();
}
return 0;
}
실행 결과:
원본 목록: Alice (20세) Bob (30세) Charlie (25세) David (35세) Eve (22세) 회전하여 복사한 결과: Charlie (25세) David (35세) Eve (22세) Alice (20세) Bob (30세) 원본 목록은 변경되지 않음: Alice (20세) Bob (30세) Charlie (25세) David (35세) Eve (22세)
| 함수 | 설명 |
|---|---|
| rotate_copy(first, middle, last, result) | 범위 [first, last)에서 middle 위치의 요소가 첫 번째 위치로 오도록 회전하여 result부터 시작하는 범위에 복사 |