向量不接受cin的输入

时间:2019-02-03 12:39:30

标签: c++ vector

我正在尝试将cin中的输入元素作为cin>>ngarmy[]i 但是在整个程序中所有元素都保持为零 谁能告诉我向量的问题吗?

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector <int> ngarmy(100);
vector <int> nmarmy(100);
int main() {
    int t;
    cin >> t;
    while (t--) {
        int ng, nm;
        cin >> ng >> nm;
        for (int i = 0; i < ng; i++) {
            cin >> ngarmy[i];
        }
        for (int i = 0; i < nm; i++) {
            cin >> nmarmy[i];
        }
        sort(ngarmy.begin(), ngarmy.end());
        sort(nmarmy.begin(), nmarmy.end());
        int i = 0, j = 0;
        int ans = 0;
        while (1) {
            if (ngarmy[i] < nmarmy[j]) {
                i++;
                if (i == ng) {
                    ans = 1;
                    break;
                }
            }
            else {
                j++;
                if (j == nm) {
                    ans = 2;
                    break;
                }
            }

        }
        if (ans == 1)
            cout << "MechaGodzilla" << endl;
        else
            cout << "Godzilla" << endl;
    }
}

1 个答案:

答案 0 :(得分:4)

向量的大小为100,但大多数为零,因为您没有100个输入。在对向量进行排序时,所有零都到达向量的开头,因为零是最小的数字。

您错误地读取了向量。不要使向量的大小始终为100,而应使它们的大小与输入的数目相同。以零大小开始向量,并在读取数字时使用push_back来增加向量的大小。

vector <int> ngarmy; // vectors are size zero
vector <int> nmarmy;

    for (int i = 0; i < ng; i++) {
        int n;
        cin >> n;
        ngarmy.push_back(n); // add n to the vector
    }
    for (int i = 0; i < nm; i++) {
        int n;
        cin >> n;
        nmarmy.push_back(n); // add n to the vector
    }

或者按照评论中的建议,您可以resize将向量调整为正确的大小

vector <int> ngarmy;
vector <int> nmarmy;

    ngarmy.resize(ng);
    for (int i = 0; i < ng; i++) {
        cin >> ngarmy[i];
    }
    nmarmy.resize(nm);
    for (int i = 0; i < nm; i++) {
        cin >> nmarmy[i];
    }