在一个向量中搜索一系列记录



我有一个包含4个对象的向量。该对象包含一个名为员工编号的属性。系统提示用户输入2个输入来搜索矢量。输入编号1:起始点(应该给出工作人员编号)输入编号2:终点(应给出工作编号)

例如,如果用户将输入数字1作为Ad0,将输入数字2作为Ad2。系统应该定位工作编号为Ad0的对象在向量中的位置,然后开始将所有值显示到屏幕上,直到找到终点,即输入编号2。因此,当系统发现工作编号为Ad2的对象时,它应该停止迭代。

为了达到这个目的,我所做的是:-

cout<<"Enter Staff number Start Point"<<endl;
cin>>start;
cout<<"Enter Staff number End Point"<<endl;
cin>>end;
if(start.find("Ad")!= std::string::npos && end.find("Ad")!=     std::string::npos) {
    for(Administrator iter: adminTObj.getVectorAdministrator()) {
        if(iter.getStaffNumber()==start) { 
        //checks for the staff number
            while(iter.getStaffNumber()==end) { 
            //if found loop the vector until it meets staff number which ends the range
                cout<<iter.toString2(iter)<<endl; //display the values
            }
        }
    }
}

这个代码的缺点是它只显示一个值。我保证在我迭代的向量中有4个值。例如,如果我给出的范围为"Ad0"到"Ad3",它只显示记录"Ad0",但它不显示"Ad2"。

这里有什么问题吗?

感谢您的宝贵时间。

你不能像现在这样在for循环中使用while,因为迭代器永远不会进阶。

我会尝试这样做:

auto vector = adminTObj.getVectorAdministrator();
auto first = std::find(vector.begin(), vector.end(), start);
while(first != vector.cend()) {
    if(*first != end) {
        std::cout << *first << std::endl;
    } else break;
}

与您的代码一样,它假设向量已排序。

最新更新