如何获取由空格分隔的输入并将其存储在c ++中的向量中

时间:2015-05-19 09:16:27

标签: c++ vector

我有一个有三个实例的类,一个整数 - noOfCouples和两个向量 - womenHotness和menHotness 我必须首先取输入noOfCouples然后根据我的第一个输入我必须用空格分隔输入并创建两个向量

到目前为止,我已经完成了这个

#include <iostream>
#include <vector>

class hotness {

    private:
        int noOfCouples;
        std::vector<int> womenHotness;
        std::vector<int> menHotness;

    public:
        void setNoOfCouples(int num);
        void setWomenHotness(std::vector<int>& hotness);
        void setMenHotness(std::vector<int>& hotness);
        int getNoOfCouples();
        std::vector<int> getWomenHotness();
        std::vector<int> getMenHotness();

};

void hotness::setNoOfCouples(int num) {
    noOfCouples = num;
}

void hotness::setMenHotness(std::vector<int> &hotness) {
    menHotness.swap(hotness);
}

void hotness::setWomenHotness(std::vector<int> &hotness) {
    womenHotness.swap(hotness);
}

int hotness::getNoOfCouples() {
    return noOfCouples;
}

std::vector<int> hotness::getMenHotness() {
    return menHotness;
}

std::vector<int> hotness::getWomenHotness() {
    return womenHotness;
}

int main() {
    int t, i = 0, noc, k = 0, output;
    std::vector<int> women(1000);
    std::vector<int> men(1000);
    std::cin >> t;
    hotness input[1000];
    while(i < t) { // this loop is just for test cases
        std::cin >> noc;
        input[i].setNoOfCouples(noc);
        k = 0;
        std::cout << "i = " << i << " k = " << k << "\n";
        while(k<noc) {
            std::cin >> men[k];
            std::cin >> women[k];
            k++;
        }
        input[i].setMenHotness(men);
        input[i].setWomenHotness(women);
        i++;
    }
}

但是在调试时我得到了EXC_BAD_ACCESS,即我猜我的代码试图访问我的向量的未分配地址

这是分配输入并分配到新向量的正确方法,还是我的代码中有任何错误

请建议最有效的方法

提前致谢

2 个答案:

答案 0 :(得分:0)

您收到错误是因为setMenHotness()setWomenHotness()使用vector::swap()功能 这会将men向量的内容与menHotness向量交换 因此,在while(i < t)循环的第一次迭代中,在调用swap函数之后,menHotness向量将包含1000个int,men向量将不包含任何内容。 然后,在第二次迭代中,您将调用std::cin >> men[k];。这将尝试在men[0]中存储一个整数,但men[0]不再存在,因此您会收到错误。

我会更改setMenHotnesssetWomenHotness函数以使用=运算符,即:

void hotness::setMenHotness(std::vector<int> &hotness) {
    menHotness = hotness;
}
void hotness::setWomenHotness(std::vector<int> &hotness) {
    womenHotness = hotness;
}

然后像这样更改main函数:

int main() {
    int t, i = 0, noc, k = 0, output;
    int user_input;
    std::vector<int> women;
    std::vector<int> men;
    std::cin >> t;
    hotness input[1000];
    while(i < t) { // this loop is just for test cases
        std::cin >> noc;
        input[i].setNoOfCouples(noc);
        k = 0;
        std::cout << "i = " << i << " k = " << k << "\n";
        while (k < noc) {
            std::cin >> user_input;
            men.push_back(user_input);
            std::cin >> user_input;
            women.push_back(user_input);
            k++;
        }
        input[i].setMenHotness(men);
        input[i].setWomenHotness(women);
        i++;
    }
}

答案 1 :(得分:0)

我得到了EXC_BAD_ACCESS的原因,这是因为临时矢量男人和女人没有获得新实例,因为它是在输入循环之前启动的

主要更新

int main() {
    int t, i = 0, noc, k = 0, output;
    std::cin >> t;
    hotness input[1000];
    while(i < t) {
        std::cin >> noc;
        std::vector<int> women(1000);
        std::vector<int> men(1000);
        input[i].setNoOfCouples(noc);
        k = 0;
        while(k<noc) {
              std::cin >> men[k];
              k++;
        }
        k = 0;
        while(k<noc) {
            std::cin >> women[k];
            k++;
        }
        input[i].setMenHotness(men);
        input[i].setWomenHotness(women);
        i++;
    }
}