template<typename... Args>
auto RightFold(Args... args)
{
return (args - ...);
}
template<typename... Args>
auto LeftFold(Args... args)
{
return (... - args);
}
template<typename... Args>
auto RightFoldWithInit(Args... args)
{
return (args - ... - 1);
}
template<typename... Args>
auto LeftFoldWithInit(Args... args)
{
return (1 - ... - args);
}
int main()
{
std::cout << RightFold(1, 2, 3, 4) << std::endl; // (1-(2-(3-4))) // Unary Right simple examples
std::cout << LeftFold(1, 2, 3, 4) << std::endl; // (((1-2)-3)-4) // Unary Left simple examples
std::cout << RightFoldWithInit(2, 3, 4) << std::endl; // (2-(3-(4-"1"))) // Binary Right simple examples
std::cout << LeftFoldWithInit(2, 3, 4) << std::endl; // ((("1"-2)-3)-4) // Binary Left simple examples
cout << endl;
}
C++ 에서 폴드의 표현방식
Right와 Left의 예를들기위해서 - 오퍼레이터를 사용한예시이다.
주석은 실행되는것을 풀어쓴거고 Binary 의 경우 초기값을 가지는 폴드로써 주석에서는 "" 안에 초기값을 적어놓았다.
C++ 에서는 ... 과 값들의 위치에따라 Right,Left가 정해진다.
728x90
'프로그래밍 언어 노트 > C++ | Modern C++' 카테고리의 다른 글
[Modern C++] Partition (0) | 2019.12.21 |
---|---|
[Modern C++] C++ structured binding (0) | 2019.12.21 |
[Modern C++] C++ 의 커링 (0) | 2019.12.18 |
[Modern C++] C++ 의 map, reduce, filter (0) | 2019.12.18 |
[Modern C++] C++ 코루틴 (0) | 2019.07.09 |