Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249

Шаблонная функция которая должна суммировать элементы векторов

22.12.2022, 07:06. Показов 1145. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите, пожалуйста, можно ли как-то реализовать шаблонную функцию "sum_all", которая должна суммировать элементы векторов (а также и просто отдельные символы)?

Примеры:

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

C++
1
2
3
4
vector<int> v1    = { 1, 2, 3 };
vector<double> v2 = { 1, 2, 3 };
vector<string> v3 = { "a", "bc", "def" };
vector<char> v4   = { 'a', 'b', 'c' };
Выходные данные:

C++
1
2
3
4
5
6
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"
Если работать с чисто векторами, то еще более-менее понятно, как работать. А как быть с простыми числами в купе с векторами?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2022, 07:06
Ответы с готовыми решениями:

Как суммировать элементы векторов типа float
Доброго времени суток, есть проблема с которой не знаю как справиться. Если у кого-нибудь есть книга или навыки как решить этот вопрос,...

Шаблонная функция которая будет вычислять TF-IDF
Всем добрый вечер! Нужно сделать шаблонную функцию, которая будет вычислять TF-IDF. Однако не проходит решение, судя по всему из-за ...

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

16
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12935 / 6802 / 1821
Регистрация: 18.10.2014
Сообщений: 17,214
22.12.2022, 07:31
Цитата Сообщение от Fershtein Посмотреть сообщение
Если работать с чисто векторами, то еще более-менее понятно, как работать.
Что такое "чисто векторы"?

Цитата Сообщение от Fershtein Посмотреть сообщение
А как быть с простыми числами в купе с векторами?
Не ясно, о чем здесь речь.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
22.12.2022, 08:17  [ТС]
TheCalligrapher, Под "чисти векторы" я понимаю, что в функцию будут подаваться только вектора с различными типами данных, а не "одинокое число/буква"

А речь о том, что в функцию, судя по всему, могут подаваться в качестве параметра как вектор, так и "обычная" переменная (типа 5 или 'a')
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
22.12.2022, 08:25
Цитата Сообщение от Fershtein Посмотреть сообщение
можно ли как-то реализовать шаблонную функцию "sum_all", которая должна суммировать элементы векторов
Можно. Они даж в stl уже есть.
Цитата Сообщение от Fershtein Посмотреть сообщение
так и "обычная" переменная (типа 5 или 'a')
А смысл?? С чем их суммировать-то?
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
22.12.2022, 08:30  [ТС]
Folian, Смысла нет. Типа дали задачу - думай. А я хз, что мне делать с вектором и числом.

Если про под использование stl имеете в виду суммировать только элементы вектора, то я и без stl могу это сделать. Но вот именно с числами что делать в функции - без понятия.

И я никак не соображу, как, может, раздеть их в функции через операторы условия или try/catch. Но в любом случае будет ругаться.

Может, есть какая-нибудь идея?

Добавлено через 41 секунду
Folian,
Цитата Сообщение от Folian Посмотреть сообщение
С чем их суммировать-то?
Ни с чем. Просто вывести то, что подали в параметр
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
22.12.2022, 08:32
Цитата Сообщение от Fershtein Посмотреть сообщение
с простыми числами в купе с векторами?
Дай-ка повангую: мож под "простыми числами" понимается начальное значение? Тогда всё становится нормально и очень похоже на обычную stl-суммилку.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
22.12.2022, 08:42  [ТС]
Folian, в плане "Начальное значение"?

sum_all(5) - вот так должно подавать, к примеру, просто число в функцию
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
22.12.2022, 09:27
Лучший ответ Сообщение было отмечено Fershtein как решение

Решение

Цитата Сообщение от Fershtein Посмотреть сообщение
просто число в функцию
чушь какая.
Цитата Сообщение от Fershtein Посмотреть сообщение
есть какая-нибудь идея?
Перегрузки и специализация.
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T>
T foo(const std::vector<T>& vec)
{
    return T{};
}
 
template <typename T>
T foo(T val)
{
    return val;
}
Цитата Сообщение от Fershtein Посмотреть сообщение
vector<char> v4 = { 'a', 'b', 'c' };
Для этого ещё отдельно перегрузку нужно.

Я б как в stl делал, получается удобно и логично:
C++
1
2
    std::vector<char> v { 'b', 'd', 'c' };
    auto res { std::accumulate(v.begin(), v.end(), std::string()) };
А кода на две строки.
2
0 / 0 / 0
Регистрация: 21.12.2022
Сообщений: 2
22.12.2022, 09:59
Реализовать такие функции просто.
Я навел 2 примера для int и string.
Для всего остального ты уже себе перегрузки поделаешь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int sum_all(vector<int> vec) {
    int n = vec.size();
    int sum=0;
    for (int i = 0; i < n; i++) {
        sum += vec[i];
    }
    return sum;
}
 
string sum_all(vector<string> vec) {
    int n = vec.size();
    string sum{};
    for (int i = 0; i < n; i++) {
        sum += vec[i];
    }
    return sum;
}
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
22.12.2022, 14:01  [ТС]
Alfapro, Шаблон нужен!

Добавлено через 4 минуты
Folian,
Цитата Сообщение от Folian Посмотреть сообщение
template <typename T>
T foo(const std::vector<T>& vec)
{
    return T{};
}
template <typename T>
T foo(T val)
{
    return val;
}
Это одинаковая функция, но в зависимости от значения выполнится то или иное?

Добавлено через 33 минуты
Folian, Так. Но а все же, как без stl намутить сложение букв?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
22.12.2022, 14:16
Лучший ответ Сообщение было отмечено Fershtein как решение

Решение

Цитата Сообщение от Fershtein Посмотреть сообщение
намутить сложение букв
C++
1
2
3
4
5
6
7
8
template<class T, class ResultType = std::conditional_t<std::is_same_v<T, char>, std::string, T>>
ResultType sum_all(std::vector<T> const& v)
{
    ResultType result{};
    for (auto &x : v)
        result += x;
    return result;
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.12.2022, 14:45
Цитата Сообщение от Fershtein Посмотреть сообщение
Но а все же, как без stl намутить сложение букв?
Вы определитесь, и расскажите всем, что вы понимаете под STL ?

std::string тоже часть STL!
std::vector тоже часть STL!
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
22.12.2022, 14:48
Цитата Сообщение от zayats80888 Посмотреть сообщение
for (auto &x : v)
Лучше, наверное, вот так )))
C++
1
for (const auto &x : v)
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
22.12.2022, 16:20  [ТС]
zayats80888, error: ‘conditional_t’ does not name a type

Ругается по Вашему коду
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
22.12.2022, 16:30
Лучший ответ Сообщение было отмечено Fershtein как решение

Решение

Fershtein, #include <type_traits> и С++17
На будущее, если встречаешь что-то незнакомое с квалификатором имени std, можешь поискать тут.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12935 / 6802 / 1821
Регистрация: 18.10.2014
Сообщений: 17,214
22.12.2022, 23:40
Цитата Сообщение от Fershtein Посмотреть сообщение
Это одинаковая функция, но в зависимости от значения выполнится то или иное?
Это две разные функции. Точнее два разных шаблона. В вашем задании сказано "реализовать шаблонную функцию", то есть одну функцию. Так что все таки имеется в виду?
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
23.12.2022, 12:21  [ТС]
TheCalligrapher, Да пофиг. Преподаватель скачал из интернета задачу, сам толком в ней не разобравшись. Да и сайт, откуда задача бралась, тоже решения не предоставил

Но если Вы сможете реализовать эту функцию, чтобы была одна (один шаблон) и выполняла все то, что было показано в выходных данных, то был бы признателен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2022, 12:21
Помогаю со студенческими работами здесь

Шаблонная функция которая в «строке» заменяет все повторяющиеся подряд символы
Помогите выполнить задачу. В произвольной «строке» заменить все повторяющиеся подряд символы. «Строка» и символ – произвольного типа.

Шаблонная функция, которая из заданного файла чисел убирает все дубликаты
Составить описание шаблонной функции, которая из заданного файла чисел убирает все компоненты дбликаты. Для ршения можно использовать...

Суммировать элементы массива, расположенные до первого четного числа. Суммировать все нечетные элементы и <11
1. Нужно вычислить сумму массива до первого четного с помощью формул Excel Не удается модернизировать формулу, пока она вычисляет...

Шаблонная функция с тремя параметрами одинакового типа, которая возвращает наибольшее значение
Создать шаблонную функцию с тремя параметрами одинакового типа, которая возвращает наибольшее значение.

Шаблонная функция обнуляющая элементы массива равные заданному значению
Задача: Создайте шаблонную функцию clearArray(), которая принимает массив, его длину и ключевое значение. Функция обнуляет все элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru