1.范例
foreach
void print(int e)
{
cout << e<<' ';
}
int _tmain(int argc, _TCHAR* argv[])
{
list<int> vi;
for (int i = 0; i < 6;i++)
{
vi.push_front(i);
vi.push_back(i);
}
for_each(vi.begin(), vi.end(), print);
}
再一个例子,容器之间变换
transform
int square(int x)
{
return x*x;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> vi;
for (int i = 0; i < 6;i++)
{
//vi.push_front(i);
vi.push_back(i);
}
set<int> si;
transform(vi.begin(), vi.end(), inserter(si,si.begin()), square);
copy(si.begin(), si.end(), ostream_iterator<int>(cout, " "));
}
2.判断式
Predicate是一种特殊的辅助函数,这种辅助函数会返回布尔值,常被用来指定排序准则或者查找准则。
单参数判断式
bool isPrime(int x)
{
if (x == 0 || x == 1)
{
return false;
}
int div;
for (div = x / 2; x%div != 0; --div)
{
;
}
return div == 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> vi;
for (int i = 24; i < 30;i++)
{
//vi.push_front(i);
vi.push_back(i);
}
auto pos = find_if(vi.begin(), vi.end(), isPrime);
if (pos!=vi.end())
{
cout << *pos;
}
}
多参判断式
class Person
{
public:
Person(string firstname, string familyname) :_firstname(firstname), _familyname(familyname){}
string firstname()const { return _firstname; }
string familyname() const { return _familyname; }
private:
string _firstname;
string _familyname;
};
bool personSort(Person& p1, Person& p2)
{
return p1.familyname() < p2.familyname() ||
(p1.familyname() == p1.familyname() &&
p1.firstname() < p2.firstname());
}
int _tmain(int argc, _TCHAR* argv[])
{
deque<Person> dp;
dp.push_back(Person("a", "b"));
dp.push_back(Person("a", "d"));
dp.push_back(Person("a", "c"));
dp.push_back(Person("a", "f"));
for (auto& a:dp)
{
cout << a.firstname() << " " << a.familyname() << endl;
}
sort(dp.begin(), dp.end(), personSort);
cout << endl;
for (auto& a : dp)
{
cout << a.firstname() << " " << a.familyname() << endl;
}
}