5

Подскажите, есть ли такая функция для вектора целых чисел?

2 ответа 2

11

Да, почти. Есть функция, которая умеет сворачивать (fold). Ей нужно передать два дополнительных параметра - начальное значение (в случае умножения это 1, это логично) и что делать с элементами (умножать). Вот код

#include <iostream>     // std::cout
#include <functional>   // std::multiplies
#include <numeric>      // std::accumulate
#include <vector>

int main () {
  int init = 1;
  std::vector<int> numbers = {10,20,30};

  std::cout << std::accumulate(
                   numbers.begin(), // начало для умножения
                   numbers.end(),// конец для умножения
                   init,// начальное значение
                   std::multiplies<int>());// готовая функция умножения.
  std::cout << '\n';

  return 0;
}
3
  • Спасибо, @KoVadim, вы прям волшебник. ____ Странное дело, у меня функция accumulate не в std пространстве. ) Ох уж эти стандарты.
    – perfect
    23 окт 2014 в 15:32
  • Видимо, у Вас плохой компилятор. Случайно не в tr1 namespace?
    – KoVadim
    23 окт 2014 в 15:41
  • Она в глобальном пространстве. А компилятор стандартный microsoft из mvs 2010.
    – perfect
    24 окт 2014 в 13:06
1

Или другой вариант:

#include <iostream>     
#include <vector>

using namespace std;

int Multi(vector<int> v) {
    int mul = 1;                     // сначала задаём множитель
    for (int i=0; i<v.size(); i++) { // v.size() возвращает количество элементов в векторе
        mul=mul*v[i];                // умножается mul на первый элемент вектора
    }                                // а т.к. mul=1, то переменная mul 
                                     //становится равна первому элементу вектора
    return mul;
}
int main() {
    vector<int> vec = { 10,20,30 };
    int res = Multi(vec);
    cout << res << endl;
    return 0;
}

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.