C++ std::adjacent_difference의 영리한 설계와 단점

2025-08-25

이 글에서는 C++ 표준 라이브러리의 `std::adjacent_difference` 알고리즘의 설계 철학을 살펴봅니다. 이 알고리즘은 입력 시퀀스의 인접한 요소 간 차이를 계산하고 첫 번째 요소를 출력 시퀀스에 복사합니다. 이 설계는 `std::partial_sum` 알고리즘과의 대칭성을 보장하며 미적분의 미분과 적분을 반영하지만, 임의의 형식의 요소 간 차이가 다른 형식이 될 수 있으므로 일반성을 제한합니다. 이 글에서는 미적분의 미분과 적분과의 유사성을 더 자세히 보여주고 알고리즘 설계의 이유를 설명하며, Q 언어의 더욱 유연한 `deltas` 함수와 비교합니다. 결론적으로, Stepanov의 초기 의도는 훌륭했지만 알고리즘은 일반성이 부족하며 C++23의 `pairwise_transform`이 더 유연한 대안을 제공합니다.

개발