我有一个包含4个对象的向量。该对象包含一个名为staff number的属性。系统提示用户提供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”。
这里似乎有什么问题?
感谢您的时间。
答案 0 :(得分:1)
你不能在while
循环中使用for
,因为迭代器永远不会先进。
我会尝试这些方法:
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;
}
与您的代码一样,它假定向量已排序。