mirror of
https://github.com/ETLCPP/etl.git
synced 2026-06-16 00:46:03 +08:00
63 lines
1.2 KiB
Markdown
63 lines
1.2 KiB
Markdown
---
|
|
title: "Invert"
|
|
---
|
|
|
|
{{< callout type="info">}}
|
|
Header: `invert.h`
|
|
From: `20.9.0`
|
|
{{< /callout >}}
|
|
|
|
Invert an input range.
|
|
|
|
```cpp
|
|
template <typename TInput>
|
|
class invert : public etl::unary_function<TInput, TInput>
|
|
```
|
|
|
|
``TInput``` The input data type.
|
|
|
|
```cpp
|
|
invert()
|
|
```
|
|
**Description**
|
|
`offset` = 0
|
|
`minuend` = `etl::numeric_limits<TInput>::is_signed) ? TInput(0)
|
|
: etl::numeric_limits<TInput>::max())`
|
|
|
|
If the type is signed then the input values have their sign changed.
|
|
i.e. `10` => `-10`, `-10` => `10`.
|
|
If the type is unsigned then the input values are subtracted from the type's maximum value.
|
|
|
|
---
|
|
|
|
```cpp
|
|
invert(TInput offset, TInput minuend)
|
|
```
|
|
**Description**
|
|
Sets the offset and minuend.
|
|
|
|
---
|
|
|
|
```cpp
|
|
TInput operator()(TInput value) const
|
|
```
|
|
**Description**
|
|
Invert a value.
|
|
Calculates `minuend - (value - offset)`
|
|
|
|
## Example
|
|
```cpp
|
|
std::array<int, 10> input =
|
|
{
|
|
10, 11, 12, 13, 14, 15, 16, 17, 18, 19
|
|
};
|
|
|
|
std::array<int, 10> output;
|
|
|
|
etl::invert<int> invert(10, 100); // offset = 10, minuend = 100
|
|
|
|
std::transform(input.begin(), input.end(), output.begin(), invert);
|
|
|
|
// output = 100.0, 99.0, 98.0, 97.0, 96.0, 95.0, 94.0, 93.0, 92.0, 91.0
|
|
```
|