无法获取向量中元素的总和

Can't get the sum for the elements in a vector

本文关键字:元素 获取 向量      更新时间:2023-10-16

由于某种原因,我无法对向量中的元素求和。 当我运行程序时,控制台只打印出第一个元素。 例如,如果我的输入是:12 23 45 56(全部在一行中(,则输出为 12

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <numeric>
using namespace std;
int main() {
    vector<int> myVector;
    int numberOfValuesToSum = 10;
    int vectorValues = 0;
    int sum = 0;
//    cout << "Please enter the number of values you want to sum: ";
//    cin >> numberOfValuesToSum;
    cout << "Please enter some integers: ";
    cin >> vectorValues;
    myVector.push_back(vectorValues);
    for (int i : myVector) {
        sum += i;
        cout << sum << endl;
    }
}

您需要在循环中输入向量中的值。此外,您还可以使用标头<numeric>中声明的标准算法std::accumulate计算总和。并且您应该至少在 long long int 类型的对象中累积值,因为总和可能是一个非常大的数字。

这是一个演示程序。

#include <iostream>
#include <vector>
#include <numeric>
int main() 
{
    size_t numberOfValuesToSum = 10;
    std::vector<int> v;
    v.reserve( numberOfValuesToSum );
    int vectorValues;
    std::cout << "Enter " << numberOfValuesToSum << " integer numbers: ";
    for ( size_t i = 0; i < numberOfValuesToSum && std::cin >> vectorValues; i++ )
    {
        v.push_back( vectorValues );
    }
    long long int sum = std::accumulate( v.begin(), v.end(), 0ll );
    std::cout << "sum = " << sum << std::endl;
    return 0;
}

它的输出可能看起来像

Enter 10 integer numbers: 0 1 2 3 4 5 6 7 8 9
sum = 45

提供12 23 45 56的示例中,必须在第 cin >> vectorValues; 行中将其转换为 int vectorValues ,但是vectorValues是一个int(单个数字,而不是数字数组(不是 vector ((。由于空间是分隔符,因此12被获取并转换为int

因此vector<int> v只包含一个12的值,所以总和也是12的。

我对你的问题的主张如下,它允许输入任意数量的数字:

#include <iostream>
#include <vector>
using namespace std;
int main() {
    vector<int> myVector;
    //provide several space separated numbers, accept them by pressing ENTER
    cout << "Please enter some integers: "; 
    while (cin.peek() != 'n') // check user input if ENTER was provided
    {
        int value;
        cin >> value; // convert each provided value from let's say "string" to int
        myVector.push_back(value); // add int to vector
    }
    int sum = 0;
    for (int i : myVector) {
        sum += i;
    }
    cout << "sum = " << sum << endl;
    return sum;
}

示例输出:

Please enter some integers: 2 4 8<ENTER>
sum = 14

空格将值与其他值分开。当您按空格键时,它会将其视为结束第一个值,因此它继续前进,等到下一个要求它的语句。数组将它看到的所有值相加(只有第一个(,然后程序结束。如果你想要一个正确的程序,这样做

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <numeric>
using namespace std;
int main() {
    vector<int> myVector;
    int numberOfValuesToSum = 10;
    int vectorValues = 0;
    int sum = 0;
    cout << "Please enter the number of values you want to sum: ";
    cin >> numberOfValuesToSum;
    int count = 1;     //counter
    while ( numberOfValuesToSum >= count ){
        cout << "Please enter an integer: ";
        cin >> vectorValues;
        cout << "/n"
        myVector.push_back(vectorValues);
        count++;
    }
    for (int i : myVector) {
            sum += i;
            cout << sum << endl;
    }
    cout << "Your sum is: "
    cout << sum
}