Разница между кодом, созданным с использованием функции шаблона, и обычной функциейC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Разница между кодом, созданным с использованием функции шаблона, и обычной функцией

Сообщение Anonymous »

У меня есть вектор, содержащий большое количество элементов. Теперь я хочу написать небольшую функцию, которая подсчитывает количество четных или нечетных элементов в векторе. Поскольку производительность является основной проблемой, я не хочу помещать оператор if внутри цикла. Поэтому я написал две небольшие функции типа:

Код: Выделить всё

long long countOdd(const std::vector& v)
{
long long count = 0;
const int size = v.size();
for(int i = 0; i < size; ++i)
{
if(v[i] & 1)
{
++count;
}
}
return count;
}

long long countEven(const std::vector& v)
{
long long count = 0;
const int size = v.size();
for(int i = 0; i < size; ++i)
{
if(0 == (v[i] & 1))
{
++count;
}
}
return count;
}
Мой вопрос: могу ли я получить тот же результат, написав одну функцию шаблона следующим образом:

Код: Выделить всё

template 
long long countTemplate(const std::vector& v1)
{
long long count = 0;
const int size = v1.size();
for(int i = 0; i < size; ++i)
{
if(countEven)
{
if(v1[i] & 1)
{
++count;
}
}
else if(0 == (v1[i] & 1))
{
++count;
}
}
return count;
}
И используем его следующим образом:

Код: Выделить всё

int main()
{
if(somecondition)
{
countTemplate(vec); //Count even
}
else
{
countTemplate(vec); //Count odd
}
}
Будет ли код, сгенерированный для шаблонной и нешаблонной версии, одинаковым? или будут выданы какие-то дополнительные инструкции?

Обратите внимание, что подсчет чисел предназначен только для иллюстрации, поэтому, пожалуйста, не предлагайте другие методы подсчета.
РЕДАКТИРОВАТЬ:
Хорошо. Я согласен, что это может не иметь особого смысла с точки зрения производительности. Но, по крайней мере, с точки зрения удобства обслуживания, мне бы хотелось поддерживать только одну функцию вместо двух.

Подробнее здесь: https://stackoverflow.com/questions/129 ... al-functio
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»