2015-05-19 35 views
0

我有一個類有三個實例,一個整數--noOfCouples和兩個向量 - womenHotness和menHotness 我必須先輸入noOfCouples,然後根據我的第一個輸入我必須採取輸入用空格分開,並創建兩個向量如何獲得以空格分隔的輸入並將其存儲在C++中的向量中

到目前爲止,我已經做到了這一點

#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

你得到的錯誤,因爲setMenHotness()setWomenHotness()使用vector::swap()函數。
這將交換men載體的內容與menHotness載體。
因此,在while(i < t)循環的第一次迭代中,在調用swap函數之後,menHotness向量將包含1000個整數,而向量將包含none。 然後,在第二次迭代中,您將撥打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++; 
    } 
} 
+0

請注意,get和set num是unnecesary後setmen通話變得無效。使用'std :: vector :: size'是穩定的 – Quest

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++; 
    } 
} 
相關問題