¿Cómo está negando este código todos los números en mi matriz?

Básicamente necesita saber qué hace la función transform y qué hace la clase negate .

Veamos la clase negativa:

plantilla struct negate {

Operador T () (const T & x) const {return -x;}

typedef T argumento_tipo;

typedef T result_type;

};

Como puede ver arriba, el operador () está sobrecargado y toma un tipo de plantilla con la que se instancia, en su caso int. Tan claro hasta ahora.

A continuación, la función Transform tiene 2 tipos de API, una que requiere un operador unario como negate (en su caso) y algún tiempo operador binario (como plus , porque necesitan 2 operandos para agregar).

Ahora en su caso, su primer tipo de API que toma un operador unario.

transform (a, a + size, a, negate ());

Entonces, actúa en una matriz de tamaño a a +, y pasa cada valor para negar (a [i)), obtener el resultado de ese operador () y almacenarlo en un (tercer parámetro)

Espero que sea claro.

De: transform – Referencia de C ++

plantilla

Transformación OutputIterator (
InputIterator first1, InputIterator last1,
Resultado OutputIterator,
Operación Unary op
);

Arriba, la función de transformación necesita 2 parámetros de entrada (usted proporcionó: tamaño a y a +), 1 parámetro de salida (proporcionó: a) y una operación unaria (proporcionó: negate ())

Para tu caso,

La operación de transformación se realiza en la lista de ‘a’ a ‘a + size’, que es una matriz completa.

la salida se almacenará para volver a la misma matriz comenzando en ‘a’

La operación real realizada en la entrada se da como negada: referencia de C ++, por lo que convierte su signo en signo opuesto (+ ve a -ve).

Por lo tanto, convierte todo ‘a’ en ‘tamaño a’, de + ve a -ve, y los almacena de nuevo en ‘a’ desde el principio.

Espero que haya ayudado.

La mejor de las suertes