Как сделать бокс в C ++? - PullRequest
0 голосов
/ 11 марта 2019

У меня есть следующая программа, она не компилируется, я верю в это, потому что она пытается выполнить begin (), end () для типа int, т.е. примитивного типа.Возможно, мне нужен тип объекта.Я прав здесь?Как я могу это исправить, я хочу использовать лямбда здесь.

#include <iostream>
#include <algorithm>

using namespace std;

int main(void) {

    int N, i;
    cin >> N;

    int numArray[N]; // Define an array of four integers

    // Get inputs for the array elements
    for (i=0;i<N; i++) {
        cin >> numArray[i];
    }

    int sum = 0;
    // Write here the logic to add these integers:


    for_each(begin(numArray), end(numArray), [&](int n){ sum += n; });

    cout << sum << endl;  // Print the sum

    return 0;
}

ошибка компиляции-

 main.cpp:22: error: no matching function for call to 'begin(int [N])'
         for_each(begin(numArray), end(numArray), [&](int n){ sum += n; });
                            ^

Ответы [ 4 ]

3 голосов
/ 11 марта 2019

Используйте std::begin(numArray) и std::end(numArray).

0 голосов
/ 11 марта 2019
 for_each(numArray, numArray + N, [&](int n){ 
        cout << "inside lambda function number:"<<n<<endl;
        sum += n; });

начинают работу с итераторами, и в основном итераторы являются указателями.Итак, это будет работать.

0 голосов
/ 11 марта 2019
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main(void) {

   std::vector<int>numArray;   // Define a vector of integers
        int i;
    // Get inputs for the array elements
    for (i=0; i<4; i++) {
        int num = 0;
        cin>>num;
        cout<<"input number:"<<num<<endl;
        numArray.push_back(num);
    }

    int sum = 0;
    // Write the logic to add these integers here:

    for_each(numArray.begin(), numArray.end(), [&](int n){ 
        cout << "inside lambda function number:"<<n<<endl;
        sum += n; });

    cout << sum << endl;// Print the sum

    return 0;
}
0 голосов
/ 11 марта 2019

Вы можете использовать std::array<int,4> вместо массива стиля c.

Кроме того, std::accumulate является более кратким для суммирования содержимого коллекции.

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