搜索向量中的一系列记录

时间:2014-05-28 12:54:24

标签: c++ loops for-loop iterator range

我有一个包含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”。

这里似乎有什么问题?

感谢您的时间。

1 个答案:

答案 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;
}

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