【问题标题】:Searching a range of records in a vector在向量中搜索一系列记录
【发布时间】:2014-07-17 17:03:58
【问题描述】:

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

这里似乎有什么问题?

感谢您的宝贵时间。

【问题讨论】:

  • while 的条件在第一位..
  • 此外,基于范围的 for 循环不会为您提供迭代器。您可能更喜欢引用管理员而不是复制:for (Administrator& admin: ...) 或 for (auto& admin: ...)

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


【解决方案1】:

您不能在 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;
}

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

【讨论】:

  • 我试过这样做,但它导致了一个无限循环。
  • 我错过了一些东西。给我一秒钟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
相关资源
最近更新 更多