C++ STL의 negate() 함수란?
C++ STL에서 제공하는 negate() 함수 객체는 주어진 값의 부호를 반전시키는 역할을 합니다. 즉, 음수는 양수로, 양수는 음수로 바꾸어 줍니다.
negate()는 <functional> 헤더에 정의된 단항 함수 객체(unary function object)로, 일반적으로 std::transform 알고리즘과 함께 사용됩니다. 이를 활용하면 배열이나 컨테이너의 모든 요소에 부호 반전 연산을 한 번에 간단하게 적용할 수 있습니다.
함수 원형
transform(a_begin, a_end, a1_begin, negate());
// a_begin : 배열(또는 컨테이너)의 시작 위치(하한)
// a_end : 배열(또는 컨테이너)의 끝 위치(상한)
// a1_begin : 변환된 결과가 저장될 대상 배열의 시작 위치
// negate() : 각 요소의 부호를 반전하는 함수 객체
예제 코드
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
int main() {
int a[] = { 4, 6, 7, -10, -20, -30 };
transform(a, a + 6, a, negate<int>());
for (int i = 0; i < 6; i++)
cout << a[i] << ' ';
return 0;
}
실행 결과
-4 -6 -7 10 20 30
동작 원리
위 예제에서는 크기가 6인 정수형 배열 a를 선언하고, transform() 함수에 배열의 시작 주소와 끝 주소, 그리고 negate<int>() 함수 객체를 전달했습니다. 입력 배열과 출력 배열을 동일하게 지정했기 때문에(in-place 연산), 배열의 각 요소가 순서대로 부호가 반전되어 다시 저장됩니다.
그 결과, 양수였던 4, 6, 7은 각각 -4, -6, -7로, 음수였던 -10, -20, -30은 각각 10, 20, 30으로 변환되어 출력되는 것을 확인할 수 있습니다.