Инициализация переменных внутри шаблонов - PullRequest
0 голосов
/ 30 марта 2020

Моя программа должна добавлять числа, если в функцию передаются целые или двойные числа, или объединять их, если они являются строками.

template<class T>
T add(vector<T> v)
{
  T temp;
  for(int i = 0; i < v.size(); i++)
  {
    temp += v[i];
  }
  return temp;
}   

Если я оставлю временную переменную неинициализированной, она не добавит элементы в векторе целых чисел, которые я передаю ему, но если я инициализирую его 0, он не будет объединять векторные элементы в векторе строк.

Как мне инициализировать переменную temp?

Ответы [ 2 ]

3 голосов
/ 30 марта 2020

Инициализируйте temp первым элементом и выполните итерации по остальным элементам:

template<class T>
T add(vector<T> v)
{
  T temp = v[0];
  for(int i = 1; i < v.size(); i++)
  {
    temp += v[i];
  }
  return temp;
} 
0 голосов
/ 30 марта 2020

Используйте алгоритм

template<class T>
T add(std::vector<T> const & v)
{
  return std::accumulate(v.cbegin(), v.cend(), T{}, std::plus{});
}   

Это также позаботится и о пустом векторе.

Кроме того, используйте входной вектор по константной ссылке.

Примечание что до с ++ 17, вы должны сказать std::plus<T>{}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...