Jee*_*eva 0 c++ stl visual-c++
问题: 我有一个CPerson类,其成员变量是Age和Marks.我创建了一个人物矢量,并填充了这些物体.现在我想只提取得分为100分的人.
我的方法: 我尝试根据标记对矢量进行排序,然后在矢量中循环以找到100的第一个位置,然后再循环直到标记不同.这里的问题是我需要手动完成.Tommorow如果我想按年龄搜索,那么我需要重复相同的算法.还有其他办法吗?
我可以使用partial_sort_copy或upper_bound/lower_bound函数来实现它.
我正在使用VS2008
听起来你需要这个remove_copy_if
功能,可以更好地命名为copy_if_not
.不幸的copy_if
是,STL缺少这个功能.
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
typedef int CPerson;
bool HasNotScoredHundred(const CPerson & person)
{
return person < 100;
}
void Print(const CPerson & person)
{
cout << person << " ";
}
int main()
{
vector<CPerson> people;
people.push_back(CPerson(50));
people.push_back(CPerson(150));
people.push_back(CPerson(100));
people.push_back(CPerson(0));
vector<CPerson> elite;
remove_copy_if
( people.begin()
, people.end()
, back_inserter(elite)
, HasNotScoredHundred
);
for_each(people.begin(), people.end(), Print);
cout << "\n";
for_each(elite.begin(), elite.end(), Print);
}
Run Code Online (Sandbox Code Playgroud)
输出:
50 150 100 0
150 100
Run Code Online (Sandbox Code Playgroud)
当然,如果你想调整标记阈值,你可以使用函子代替HasNotScoredHundred
函数.
归档时间: |
|
查看次数: |
83 次 |
最近记录: |