Найти сумму элементов вектора

Как суммировать элементы вектора С++?

Каковы хорошие способы найти сумму всех элементов в std::vector ?

Предположим, что у меня есть вектор std::vector vector с несколькими элементами в нем. Теперь я хочу найти сумму всех элементов. Каковы разные способы для этого?

На самом деле существует довольно много методов.

Классический для цикла:

Использование стандартного алгоритма:

Будьте осторожны с накоплением. Последний тип аргумента используется не только для начального значения, но и для типа результата. Если вы поместите int туда, он будет накапливать int, даже если вектор имеет float. Если вы суммируете числа с плавающей запятой, измените 0 на 0.0 или 0.0f (благодаря nneonneo).

Видео:Сумма элементов массива РЕКУРСИЯ C# | СИ ШАРП ДОМАШНИЕ ЗАДАНИЯ # 16Скачать

Сумма элементов массива РЕКУРСИЯ C# | СИ ШАРП ДОМАШНИЕ ЗАДАНИЯ # 16

С++ 11 и выше

Использование цикла, основанного на диапазоне (спасибо Roger Pate):

Prasoon уже предложил множество различных (и хороших) способов сделать это, ни один из которых не нужно повторять здесь. Однако я хотел бы предложить альтернативный подход к скорости.

Если вы собираетесь делать это совсем немного, вы можете рассмотреть возможность “подклассификации” вашего вектора, чтобы сумма элементов поддерживалась отдельно (а не вектором подклассификации, что сомнительно из-за отсутствия виртуальный деструктор – я говорю больше о классе, который содержит сумму и вектор внутри него, has-a , а не is-a , и предоставляет вектороподобные методы).

Для пустого вектора сумма устанавливается равной нулю. При каждой вставке в вектор добавляйте вставляемый элемент в сумму. На каждом удалении вычтите это. По сути, все, что может изменить базовый вектор, перехватывается, чтобы обеспечить постоянство суммы.

Таким образом, у вас есть очень эффективный метод O (1) для “вычисления” суммы в любой момент времени (просто верните вычисленную в данный момент сумму). Вставка и удаление займет немного больше времени, так как вы корректируете общее значение, и вы должны учитывать этот показатель эффективности.

Векторы, в которых сумма требуется чаще, чем вектор, который можно изменить, – это те, которые могут выиграть от этой схемы, поскольку стоимость расчета суммы амортизируется по всем доступам. Очевидно, что если вам нужна только сумма каждый час, а вектор меняется три тысячи раз в секунду, она не подойдет.

Что-то вроде этого будет достаточно:

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

Зачем выполнять суммирование вперед, когда вы можете сделать это назад? Дано:

Мы можем использовать индексирование, считая назад:

Мы можем использовать “подписи”, проверенные по диапазону, “отсчет назад (на всякий случай):

Мы можем использовать обратные итераторы в цикле for:

Мы можем использовать итераторы вперед, итерации назад, в цикле for (oooh, tricky!):

Мы можем использовать accumulate с обратными итераторами:

Мы можем использовать for_each с выражением лямбда с использованием обратных итераторов:

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

Самый простой способ – использовать std:accumuate vector A :

Я пользователь Perl, игра, которую мы имеем, состоит в том, чтобы найти всевозможные способы увеличения переменной… что здесь совсем не так. Ответ на то, сколько способов найти сумму элементов вектора в С++, вероятно, an infinity …

Используя BOOST_FOREACH, чтобы освободиться от уродливого синтаксиса итератора:

итерирование по индексам (очень легко читается).

Этот другой является деструктивным, доступ к вектору, как стек:

Это похоже на BOOST_FOREACH, упомянутый в другом месте, и имеет то же преимущество ясности в более сложных ситуациях, по сравнению с функторами состояния, используемыми с накоплением или for_each.

Можно также использовать std:: valarray, как этот

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

В этом случае не используйте его и возьмите его как еще один способ суммирования последовательности.

Я нашел самый простой способ найти сумму всех элементов вектора

В этой программе у меня есть вектор размером 10 и инициализируется 1. Я вычислил сумму простым циклом, как в массиве.

Это легко. С++ 11 предоставляет простой способ суммировать элементы вектора.

Видео:C++ | Сложение элементов массиваСкачать

C++ | Сложение элементов массива

Сумма элементов в векторе?

Как бы найти сумму элементов в векторе, который был введен пользователем? Я пытался найти способ сделать это везде в Интернете, но не смог найти такого онлайн, который бы объяснил это очень хорошо, и, к сожалению, он не был слишком объяснен в классе.

Таким образом, я в основном имею векторы, введенные пользователем здесь, но я понятия не имею, как использовать его, чтобы взять его сумму? (printvector присутствует только там, потому что я должен представить то, что пользователь положил пользователю, прежде чем сообщать пользователю сумму)

Видео:accumulate c++ | сумма и произведение элементов массива | Библиотека (stl) C++ #19Скачать

accumulate c++ | сумма и произведение элементов массива  | Библиотека  (stl) C++ #19

Решение

(Использование вашего стиля для функции, а не современного C ++.)

Видео:НАЙТИ СУММУ ЧЕТНЫХ ЧИСЕЛ В МАССИВЕ C# | РАБОТА С МАССИВАМИ | СИ ШАРП УРОКИ | ДОМАШНИЕ ЗАДАНИЯ # 8Скачать

НАЙТИ СУММУ ЧЕТНЫХ ЧИСЕЛ В МАССИВЕ C# | РАБОТА С МАССИВАМИ | СИ ШАРП УРОКИ | ДОМАШНИЕ ЗАДАНИЯ # 8

Другие решения

Ты можешь использовать std::accumulate() ,

accumulate() функция действительно просто левый сгиб , и по умолчанию он использует + функция для объединения элементов.

Видео:Вектор. Сложение и вычитание. 9 класс | МатематикаСкачать

Вектор. Сложение и вычитание. 9 класс | Математика

Как суммировать элементы вектора C++?

Что такое хороший способы нахождения суммы всех элементов std::vector ?

Предположим у меня есть вектор std::vector vector с несколькими элементами в нем. Теперь я хочу найти сумму всех элементов. Что такое разные способы для одного и того же?

Видео:Информатика 9 класс. ВЫЧИСЛЕНИЕ СУММЫ ЭЛЕМЕНТОВ МАССИВА (УМК БОСОВА Л.Л., БОСОВА А.Ю.)Скачать

Информатика 9 класс. ВЫЧИСЛЕНИЕ СУММЫ ЭЛЕМЕНТОВ МАССИВА (УМК БОСОВА Л.Л., БОСОВА А.Ю.)

8 ответов

на самом деле существует довольно много методов.

обычный цикл for:

используя стандартный алгоритм:

будьте осторожны с аккумулировать. тип последнего аргумента используется не только для начального значения, но и для типа результата. Если вы поместите туда int, он будет накапливать ints, даже если вектор имеет плыть. Если вы суммируете числа с плавающей запятой, измените 0 to 0.0 или 0.0f (спасибо nneonneo).

Видео:Пример программы для нахождения суммы отрицательных элементов массива. Программирование на С++Скачать

Пример программы для нахождения суммы отрицательных элементов массива. Программирование на С++

C++11 и выше

использование диапазона на основе цикла for (благодаря Роджеру Пейту):

Прасун уже предложил множество различных (и хороших) способов сделать это, ни один из которых не нужно повторять здесь. Однако я хотел бы предложить альтернативный подход к скорости.

Если вы собираетесь делать это совсем немного, вы можете рассмотреть вопрос о «подклассе» вашего вектора, чтобы сумма элементов поддерживалась отдельно (не на самом деле вектор подкласса, который является неопределенным из — за отсутствия виртуального деструктора- я говорю больше о классе, который содержит сумму и вектор внутри нее, has-a , а не is-a , и предоставляет векторные методы).

для пустого вектора сумма равна нулю. При каждой вставке в вектор добавьте вставляемый элемент в сумму. При каждом удалении вычтите его. В основном, что-нибудь, который может изменить базовый вектор, перехватывается, чтобы обеспечить согласованность суммы.

таким образом, у вас есть очень эффективный метод O (1) для «вычисления» сумма в любой момент времени (просто верните сумму, рассчитанную в данный момент). Вставка и удаление займет немного больше времени, как вы регулируете общую сумму, и вы должны принять во внимание эту производительность хит.

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

что-то вроде этого было бы достаточно:

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

Зачем выполнять суммирование вперед, когда вы можете это сделать назад? Дано:

мы можем использовать знак, обратный отсчет:

мы можем использовать диапазон-проверено «знак,» обратный отсчет (на всякий случай):

мы можем использовать обратные итераторы в цикле for:

мы можем использовать прямые итераторы, итерации назад, в цикле for (oooh, tricky!):

мы можем использовать accumulate с обратными итераторами:

можно использовать for_each С лямбда-выражением с использованием обратных итераторов:

Итак, как вы можете видеть, существует столько же способов суммировать вектор назад, сколько и суммировать вектор вперед, и некоторые из них гораздо более увлекательны и предлагают гораздо больше возможностей для ошибок off-by-one.

💥 Видео

Как найти сумму элементов массива с помощью Java Script i цикла FORСкачать

Как найти сумму элементов массива с помощью  Java Script i цикла FOR

Задачи с массивами | Pascal | Сумма и поиск элементовСкачать

Задачи с массивами | Pascal |  Сумма и поиск элементов

8 класс, 43 урок, Сумма двух векторовСкачать

8 класс, 43 урок, Сумма двух векторов

Работа с массивом в 1С: считаем сумму элементов массиваСкачать

Работа с массивом в 1С: считаем сумму элементов массива

Сумма элементов массива на c++Скачать

Сумма элементов массива на c++

Вычисление суммы элементов массива // информатика 9 классСкачать

Вычисление суммы элементов массива // информатика 9 класс

Сумма всех элементов массива в C#Скачать

Сумма всех элементов массива в C#

Урок 28 - Суммирование элементов массива в Java. Evil NerdСкачать

Урок 28 - Суммирование элементов массива в Java. Evil Nerd

программа вычисления суммы элементов массиваСкачать

программа вычисления суммы элементов массива

Найти сумму элементов массива // Find the sum of array elements C#Скачать

Найти сумму элементов массива // Find the sum of array elements C#

Язык C++ с нуля | #33 Найти максимальный и минимальный элемент массива в c++Скачать

Язык C++ с нуля | #33 Найти максимальный и минимальный элемент массива в c++

Найти минимальный элемент массива. Поиск минимального элемента в массиве. C++ для начинающих. ДЗ#8.Скачать

Найти минимальный элемент массива. Поиск минимального элемента в массиве. C++ для начинающих. ДЗ#8.

Язык Си. #096. Сумма элементов массива.Скачать

Язык Си. #096. Сумма элементов массива.
Поделиться или сохранить к себе: