[STL] std::ranges::transformC++/STL2024. 6. 23. 22:08
Table of Contents
1. 개요
std::ranges::transform 함수는 C++20부터 도입된 범위 기반 알고리즘 중 하나로, 주어진 입력 범위의 각 요소에 대해 지정된 변환 작업을 수행하고, 변환된 요소들을 출력 범위에 저장한다.
2. template
template <class InputRange, class OutputRange, class UnaryOperation>
constexpr OutputRange transform(InputRange&& inputRange, OutputRange&& outputRange, UnaryOperation op);
- InputRange: 변환할 입력 범위로, 범위의 첫 번째 요소의 시작과 끝을 나타낸다.
- OutputRange: 변환된 요소들을 저장할 출력 범위로, 반드시 OutputIterator의 요구사항을 충족해야 한다.
- UnaryOperation: 각 요소에 적용할 단항 연산(함수 객체 또는 람다 함수)입니다. 이 함수는 입력 요소 하나를 받아 변환된 값을 반환해야 한다.
3. for문과 비교 예시
3.1. for문
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::vector<int> squared;
// for 문을 사용하여 각 요소를 제곱하여 squared 벡터에 저장
for (int num : numbers) {
squared.push_back(num * num);
}
// 결과 출력
for (int num : squared) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
3.2. std::ranges::transform()
#include <iostream>
#include <vector>
#include <ranges>
#include <algorithm> // std::ranges::transform
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::vector<int> squared;
// 제곱 연산을 수행하는 람다 함수를 정의
auto square = [](int x) { return x * x; };
// std::ranges::transform을 사용하여 각 요소를 제곱하여 squared 벡터에 저장
std::ranges::transform(numbers, std::back_inserter(squared), square);
// 결과 출력
for (int num : squared) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
3.3. 출력결과
for문과 std::ranges::transform 함수의 출력결과는 동일하다
1 4 9 16 25
4. 참고사항
4.1. 범위 요소 수
transform() 함수는 범위 기반 알고리즘으로, 입력 범위와 출력 범위의 요소 수가 동일해야 한다.
4.2. 관련 문서
https://en.cppreference.com/w/cpp/algorithm/ranges/transform
728x90
@rlozlr :: 얼렁뚱땅 개발자
얼렁뚱땅 주니어 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!