做网站需要一些什么东西,网站建设项目公司,佛山专业网站建设公司推荐,国内做性视频网站有哪些STL容器算法主要由、、组成#xff1b; algorithm主要有遍历、比较、交换、查找、拷贝、修改等#xff1b;
1.遍历容器for_each for_each()函数用于完成容器遍历#xff0c;函数参数如下#xff1a;
for_each(_InIt _First, _InIt _Last, _Fn _Func)
形参#xff1a… STL容器算法主要由、、组成 algorithm主要有遍历、比较、交换、查找、拷贝、修改等
1.遍历容器for_each for_each()函数用于完成容器遍历函数参数如下
for_each(_InIt _First, _InIt _Last, _Fn _Func)
形参_First、_Last --容器的起始和结束迭代器_Func --仿函数(回调函数)处理要输出的信息1.1 vector容器遍历 自定义数据格式
class Person
{friend class mycompare;friend class Myprint;//友元类friend void Print(const Person p);//友元函数
public:Person() {}Person(string name, int age) :name(name), age(age) {}Person(const Person p){name p.name;age p.age;}bool operator(const Person p)const{if (this-age p.age){return p.name p.name;}return this-age p.age;}
private:string name;int age;
};void Print(const Person p)
{cout 姓名: p.name \t年龄: p.age endl;
}
class Myprint
{
public:void operator()(const Person p){cout 姓名: p.name \t年龄: p.age endl;}void operator()(const pairPerson, int p){cout 姓名: (p.first).name \t年龄: (p.first).age \t成绩: p.second endl;}
};
class mycompare
{
public:bool operator()(const Person p1,const Person p2)const{if (p1.age p2.age){return p1.name p2.name;}return p1.age p2.age;}
};
void vector_test()
{cout \tvector容器示例: endl;//创建vector容器---单端数组vectorPersonvtr;vtr.push_back(Person(小王, 18));vtr.push_back(Person(小林, 18));vtr.push_back(Person(小李, 18));vtr.push_back(Person(小刘, 18));cout 提供一个函数示例: endl;for_each(vtr.begin(), vtr.end(), Print);cout 提供一个仿函数示例: endl;for_each(vtr.begin(), vtr.end(), Myprint());
}1.2 list容器遍历
void list_test()
{//创建一个list容器--双向链表cout \tlist容器示例: endl;listPerson t;t.push_back(Person(小王, 18));//尾插t.push_front(Person(小林, 18));//头插t.push_back(Person(小李, 18));t.push_back(Person(小刘, 18));cout 提供一个仿函数示例: endl;for_each(t.begin(), t.end(), Myprint());
}1.3 set容器遍历
void set_test()
{cout \tset/multiset关联式容器: endl;multisetPersonmt;//该容器会自动排序mt.insert(Person(小王, 18));mt.insert(Person(小林, 18));mt.insert(Person(小李, 17));mt.insert(Person(小刘, 18));mt.insert(Person(小李, 22));for_each(mt.begin(), mt.end(), Myprint());cout \tset/multiset关联式容器(仿函数示例): endl;multisetPerson, mycomparemt2;mt2.insert(Person(小王, 18));mt2.insert(Person(小林, 18));mt2.insert(Person(小李, 17));mt2.insert(Person(小刘, 18));mt2.insert(Person(小李, 22));for_each(mt.begin(), mt.end(), Myprint());
}1.4 map容器遍历
void map_test()
{cout \tmap关联式容器示例: endl;multimapPerson, intmp;mp.insert(make_pair(Person(小王, 18), 88));mp.insert(pairPerson,int(Person(小林, 18),99));mp.insert(pairPerson, int(Person(小李, 17), 95));mp.insert(pairPerson, int(Person(小刘, 18), 95));mp.insert(pairPerson, int(Person(小李, 22), 90));for_each(mp.begin(), mp.end(), Myprint());
}1.5 整体运行效果
int main()
{vector_test();//vector容器list_test();//list容器set_test();//set容器map_test();//map容器system(pause);
}2.转移元素transform
transform函数transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func)将一个函数中的元素拷贝到另一个容器中_First、_Last --要转移的容器的起始迭代器和结束迭代器_Dest --目标容器的起始迭代器_Func --仿函数支持一元运算可以对当前值进行 - * 等各种运算使用示例
#include iostream
using namespace std;
#include algorithm
#include vector
/*
transform函数transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func)将一个函数中的元素拷贝到另一个容器中_First、_Last --要转移的容器的起始迭代器和结束迭代器_Dest --目标容器的起始迭代器_Func --仿函数支持一元运算可以对当前值进行 - * \ 等各种运算
*/
class myprint
{
public:void operator()(int val){cout val ;}
};
class myfunc
{
public:int operator()(int val1){return val1;}
};void test()
{vectorintt1;for (int i 0; i 10; i){int temp rand() % 101;t1.push_back(temp);}cout 原容器数据: endl;for_each(t1.begin(), t1.end(), myprint());cout endl;vectorinttarget;target.resize(t1.size());//设置target容器大小transform(t1.begin(), t1.end(), target.begin(), myfunc());cout 转移后的容器内容: endl;for_each(target.begin(), target.end(), myprint());cout endl;
}
int main()
{test();system(pause);
}