#include <iostream>
#include <vector>
using namespace std;
template<class T> vector<T> * addition_of_vectors(vector<T>& first_vector,
vector<T>& second_vector) {
vector<T> *addition_result_vector = 0; // = NULL; or = nullptr; depends on using c++ standart
if (first_vector.size() == second_vector.size()) {
addition_result_vector = new vector<T>(first_vector.size());
for (int i = 0; i < first_vector.size(); ++i) {
(*addition_result_vector)[i] = first_vector[i] + second_vector[i];
}
} else {
cout << "The sizes of vectors aren't equal!";
}
return addition_result_vector;
}
int main() {
cout << "Test of template function " << endl;
cout << "Creating first integer vector " << endl;
std::vector<int> first_integer_vector;
first_integer_vector.push_back(5);
first_integer_vector.push_back(20);
cout << "First integer vector created" << endl;
cout << "Creating second integer vector " << endl;
std::vector<int> second_integer_vector;
second_integer_vector.push_back(11);
second_integer_vector.push_back(3);
cout << "Second integer vector created" << endl;
cout << "Calling function \"addition_of_vectors\"";
std::vector<int> *pointer_to_addition_result_vector = addition_of_vectors(
first_integer_vector, second_integer_vector);
cout << "Function called";
if (pointer_to_addition_result_vector) { //Only if function returned some address
cout << "Result vector pointer : " << pointer_to_addition_result_vector
<< endl;
for (int i = 0; i < (*pointer_to_addition_result_vector).size(); ++i) {
cout << "result[" << i << "] = "
<< (*pointer_to_addition_result_vector)[i] << endl;
}
delete pointer_to_addition_result_vector; // prevent memory leaks
pointer_to_addition_result_vector = 0; // prevent usage of pointer with invalid address
} else {
cout << "Error : pointer to addition result vector is null";
}
cout << "Test finished" << endl;
return 0;
}