这是我程序的功能,该功能一直崩溃。该功能的目的是搜索向量并显示它们的等级和频率,然后将其读入各自的向量。我猜它是我的while循环,但我不确定。
矢量已正确读入。

void searchNames(vector<string> girlsname,vector<int> girlsfeq,vector<string> boysname,vector<int> boysfeq){
    string name1;
    string name;
    int SIZE = girlsname.size();
    int SIZE2 = boysname.size();
    while(name1 != "quit"){
        int i=0;
        int frank=find(girlsname.begin(), girlsname.end(), name1) - girlsname.begin();
        int mrank=find(boysname.begin(), boysname.end(), name1) - boysname.begin();
        name1.clear();
        name.clear();
        cout << "Please enter a name: ";
        cin >> name1;
        cout << endl;
        while(i< SIZE && name1 !=girlsname[i++]){

       frank++;

        }
        name.clear();
        i=0;
        while(i< SIZE2 && name1 !=boysname[i++]){

        mrank++;

        }
        cout << left << setw(15) << "Name" << right << setw(10) << "Girl Rank" << right << setw(10) << "Frequency" << right << setw(10) << "Boy Rank"<< right << setw(10) << "Frequency" << endl;
        if(frank != SIZE && mrank != SIZE2){
        cout << left << setw(15) << name1 << right << setw(10) << frank << right << setw(10) << girlsfeq[frank] << right << setw(10) << mrank << right << setw(10) << boysfeq[mrank] << endl;
}

}

最佳答案

首先,在任何循环中,您都不会更改i的值,因此它们可能是无限的。

其次,如果我了解您要执行的操作,则您已将向量配对,并在第一个向量中搜索名称在其上的索引,然后使用它从第二个向量中获取值。您可以使用std::find函数:

int frank = find(girlsname.begin(), girlsname.end(), name1) - girlsname.begin();


现在,您可以访问girlsfreq[frank]值。如果向量中没有名称,则frank等于向量的大小,您必须检查该大小。不要忘记添加包括:

#include <algorithm>

关于c++ - C++ vector 麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26812398/

10-09 06:34