💡 퀵 접속: cpp.kr/transform
C++ 표준 라이브러리의 알고리즘으로, 주어진 범위의 각 요소에 대해 변환을 수행하고 그 결과를 다른 범위에 저장합니다. transform은 원본 범위를 수정하지 않으며, 변환된 결과를 새로운 범위에 저장합니다. 단항 변환과 이항 변환 두 가지 버전이 있습니다.
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::vector<int> result;
std::cout << "원본 벡터: ";
for (int x : v) std::cout << x << " ";
std::cout << std::endl;
// 각 요소를 제곱하여 result에 저장
std::transform(v.begin(), v.end(), std::back_inserter(result),
[](int x) { return x * x; });
std::cout << "변환 후: ";
for (int x : result) std::cout << x << " ";
std::cout << std::endl;
return 0;
}
실행 결과:
원본 벡터: 1 2 3 4 5 변환 후: 1 4 9 16 25
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = {10, 20, 30, 40, 50};
std::vector<int> result;
std::cout << "v1: ";
for (int x : v1) std::cout << x << " ";
std::cout << "\nv2: ";
for (int x : v2) std::cout << x << " ";
std::cout << std::endl;
// 두 벡터의 대응하는 요소들을 더하여 result에 저장
std::transform(v1.begin(), v1.end(), v2.begin(), std::back_inserter(result),
[](int a, int b) { return a + b; });
std::cout << "변환 후: ";
for (int x : result) std::cout << x << " ";
std::cout << std::endl;
return 0;
}
실행 결과:
v1: 1 2 3 4 5 v2: 10 20 30 40 50 변환 후: 11 22 33 44 55
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string s = "Hello";
std::string result;
std::cout << "원본 문자열: " << s << std::endl;
// 모든 문자를 대문자로 변환
std::transform(s.begin(), s.end(), std::back_inserter(result),
[](char c) { return std::toupper(c); });
std::cout << "변환 후: " << result << std::endl;
return 0;
}
실행 결과:
원본 문자열: Hello 변환 후: HELLO
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
struct Person {
std::string name;
int age;
};
struct PersonInfo {
std::string info;
};
int main() {
std::vector<Person> people = {
{"Alice", 20},
{"Bob", 25},
{"Charlie", 30},
{"David", 35},
{"Eve", 40}
};
std::vector<PersonInfo> info(people.size());
// Person 객체를 PersonInfo로 변환
std::transform(people.begin(), people.end(), info.begin(),
[](const Person& p) {
return PersonInfo{p.name + " (" + std::to_string(p.age) + "세)"};
});
// 변환된 정보 출력
for (const auto& i : info) {
std::cout << i.info << std::endl;
}
return 0;
}
실행 결과:
Alice (20세) Bob (25세) Charlie (30세) David (35세) Eve (40세)
| 함수 | 설명 |
|---|---|
| transform(first, last, result, op) | [first, last) 범위의 각 요소에 대해 단항 연산 op를 적용하여 결과를 result에 저장 |
| transform(first1, last1, first2, result, op) | [first1, last1) 범위와 [first2, first2 + (last1 - first1)) 범위의 대응하는 요소들에 대해 이항 연산 op를 적용하여 결과를 result에 저장 |