ALFI
Advanced Library for Function Interpolation
Loading...
Searching...
No Matches
arrays.h
Go to the documentation of this file.
1#pragma once
2
3#include <iostream>
4
5#include "../config.h"
6
8 template <typename Number = DefaultNumber, template <typename, typename...> class Container = DefaultContainer>
9 Container<Number> add(const Container<Number>& container1, const Container<Number>& container2) {
10 if (container1.size() != container2.size()) {
11 std::cerr << "Error in function " << __FUNCTION__
12 << ": Vectors container1 (of size " << container1.size()
13 << ") and container2 (of size " << container2.size()
14 << ") are not the same size. Returning an empty array..." << std::endl;
15 return {};
16 }
17 const auto n = container1.size();
18 Container<Number> result(n);
19 for (std::remove_const_t<decltype(n)> i = 0; i < n; ++i) {
20 result[i] = container1[i] + container2[i];
21 }
22 return result;
23 }
24
25 template <typename Number = DefaultNumber, template <typename, typename...> class Container = DefaultContainer>
26 Container<Number> sub(const Container<Number>& container1, const Container<Number>& container2) {
27 if (container1.size() != container2.size()) {
28 std::cerr << "Error in function " << __FUNCTION__
29 << ": Vectors container1 (of size " << container1.size()
30 << ") and container2 (of size " << container2.size()
31 << ") are not the same size. Returning an empty array..." << std::endl;
32 return {};
33 }
34 const auto n = container1.size();
35 Container<Number> result(n);
36 for (std::remove_const_t<decltype(n)> i = 0; i < n; ++i) {
37 result[i] = container1[i] - container2[i];
38 }
39 return result;
40 }
41
42 template <typename Number = DefaultNumber, template <typename, typename...> class Container = DefaultContainer>
43 Container<Number> diff(const Container<Number>& container) {
44 if (container.empty()) {
45 return {};
46 }
47 Container<Number> result(container.size() - 1);
48 for (SizeT i = 0; i < result.size(); ++i) {
49 result[i] = container[i+1] - container[i];
50 }
51 return result;
52 }
53
54 template <typename Number = DefaultNumber, template <typename, typename...> class Container = DefaultContainer>
55 Container<Number> mean(const Container<Number>& container1, const Container<Number>& container2) {
56 if (container1.size() != container2.size()) {
57 std::cerr << "Error in function " << __FUNCTION__
58 << ": Vectors container1 (of size " << container1.size()
59 << ") and container2 (of size " << container2.size()
60 << ") are not the same size. Returning an empty array..." << std::endl;
61 return {};
62 }
63 const auto n = container1.size();
64 Container<Number> result(n);
65 for (std::remove_const_t<decltype(n)> i = 0; i < n; ++i) {
66 result[i] = (container1[i] + container2[i]) / 2;
67 }
68 return result;
69 }
70}
Definition arrays.h:7
Container< Number > add(const Container< Number > &container1, const Container< Number > &container2)
Definition arrays.h:9
Container< Number > diff(const Container< Number > &container)
Definition arrays.h:43
Container< Number > mean(const Container< Number > &container1, const Container< Number > &container2)
Definition arrays.h:55
Container< Number > sub(const Container< Number > &container1, const Container< Number > &container2)
Definition arrays.h:26
ALFI_DEFAULT_NUMBER DefaultNumber
Definition config.h:17
ALFI_SIZE_TYPE SizeT
Definition config.h:22
ALFI_DEFAULT_CONTAINER< Number > DefaultContainer
Definition config.h:20