Блок задач

9. Шаблоны C++

Темы
Сложность 2

Задача «Шаблонная функция sum_all»

Реализовать функцию sum_all, которая позволяла бы суммировать аргумент практически любого типа, который ей передан.

Входные данные

vector<int> v1    = { 1, 2, 3 };
vector<double> v2 = { 1, 2, 3 };
vector<string> v3 = { "a", "bc", "def" };
vector<char> v4   = { 'a', 'b', 'c' };

Описание задачи

sum_all будет представлять из шаблон функции с частичной специализацией для vector<T>.

Выходные данные

sum_all(5);   // 5
sum_all(3.0); // 3.0
sum_all(v1);  // 6
sum_all(v2);  // 6.0
sum_all(v3);  // строка "abcdef"
sum_all(v4);  // строка "abc"

Усложнения

  1. Добавить частичные специализации для list<T>, forward_list<T>, set<T>, unordered_set<T>.
  2. Добавить частичные специализации для map<K,V> и unordered_map<K,V> с суммированием по значениям (V).