我有一个有三个实例的类,一个整数 - 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,即我猜我的代码试图访问我的向量的未分配地址
这是分配输入并分配到新向量的正确方法,还是我的代码中有任何错误
请建议最有效的方法
提前致谢
答案 0 :(得分:0)
您收到错误是因为setMenHotness()
和setWomenHotness()
使用vector::swap()
功能
这会将men
向量的内容与menHotness
向量交换
因此,在while(i < t)
循环的第一次迭代中,在调用swap
函数之后,menHotness
向量将包含1000个int,men
向量将不包含任何内容。
然后,在第二次迭代中,您将调用std::cin >> men[k];
。这将尝试在men[0]
中存储一个整数,但men[0]
不再存在,因此您会收到错误。
我会更改setMenHotness
和setWomenHotness
函数以使用=
运算符,即:
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++;
}
}