我有一个包含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;
}
与您的代码一样,它假设向量已排序。