C++ STL实例(二)
2016-05-25 00:37
357 查看
元素计数
#if 0 /*元素计数*/ #include<iostream> #include<vector> #include<set> #include<algorithm> #include<functional>//函数对象预定义 using namespace std; template<typename Container> void print(const Container &c);//模板函数 bool even(int elem);//一元谓词 int main() { vector<int> a; for(int i=0;i<10;++i) a.push_back(i);//加入到a中 print(a); int n; //查找个数 n=count(a.begin(),a.end(),6); cout<<"number(6):"<<n<<endl; //count_if //n=count_if(a.begin(),a.end(),even); /*bind2nd 绑定*/ n=count_if(a.begin(),a.end(),bind2nd(modulus<int>(),2)); cout<<"奇数个数:"<<n<<endl; n=count_if(a.begin(),a.end(),not1(bind2nd(modulus<int>(),2))); cout<<"偶数个数:"<<n<<endl; //大于4的个数 n=count_if(a.begin(),a.end(),bind2nd(greater<int>(),4)); cout<<"number(>4):"<<n<<endl; cout<<endl; multiset<int> mst; for(int j=0;j<10;++j) mst.insert(mst.end(),j); mst.insert(2); mst.insert(7); print(mst); n=count(mst.begin(),mst.end(),7);//查看7的个数(1) cout<<"number(7):"<<n<<endl; n=mst.count(7);//查看7的个数(2),使用成员函数,速度较快 cout<<"number(7):"<<n<<endl; return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<endl; ++i; } cout<<endl; } bool even(int elem) { return elem%2==0;//返回偶数 } #endif
max-min
#if 0 /*max-min*/ #include<iostream> #include<algorithm> #include<deque> #include<functional> using namespace std; bool absless(int elem1,int elem2); template<typename Container> void print(const Container &c);//模板函数 int main() { deque<int> a; for(int i=0;i<10;i++) a.insert(a.end(),i); print(a); //min int n; n=*min_element(a.begin(),a.end());//返回值为迭代器 cout<<"min:"<<n<<endl; //max //deque<int> result=max_element(a.begin(),a.end()); n=*max_element(a.begin(),a.end()); cout<<"max:"<<n<<endl; //abs-min n=*min_element(a.begin(),a.end(),absless); cout<<"abs-min:"<<n<<endl; //abs-max //abs-min n=*max_element(a.begin(),a.end(),absless); cout<<"abs-max:"<<n<<endl; return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<endl; ++i; } cout<<endl; } bool absless(int elem1,int elem2)//以绝对值计算 { return abs(elem1)<abs(elem2); } #endif
for_each()
#if 0 /*for_each*/ #include<iostream> #include<algorithm> #include<vector> using namespace std; void print(int elem);//函数 template <class T>//模板 class addValue { private: T theValue; public: addValue(const T& v):theValue(v){} void operator()(T& elem) const { elem+=theValue; } }; class avgValue { private: long num; long sum; public: avgValue():num(0),sum(0){} void operator()(int elem) { num++; sum+=elem; } double avg() { return static_cast<double>(sum)/static_cast<double>(num);//类型转换 } operator double()//double运算符重载 { return static_cast<double>(sum)/static_cast<double>(num); } }; int main() { vector<int> ve; for(int i=1;i<10;++i) ve.push_back(i); for_each(ve.begin(),ve.end(),print);//遍历 cout<<endl; //add 10 for_each(ve.begin(),ve.end(),addValue<int>(10));//在每个数的基础上+10 for_each(ve.begin(),ve.end(),print); cout<<endl; //add 1 for_each(ve.begin(),ve.end(),addValue<int>(*(ve.begin())));//每个数+1 for_each(ve.begin(),ve.end(),print); cout<<endl; //avgValue /*avgValue xc=for_each(ve.begin(),ve.end(),avgValue());*/ double xc=for_each(ve.begin(),ve.end(),avgValue());//直接接受double cout<<"avg:"<<xc<<endl;//求出平均值 return 0; } //display void print(int elem)//函数 { cout<<elem<<" "; } #endif
区间比较
#if 0 /*区间比较*/ #include<iostream> #include<algorithm> #include<vector> #include<list> using namespace std; template<typename Container> void print(const Container &c);//模板函数 bool both(int elem1,int elem2);//二元谓词函数 int main() { vector<int> ve; list<int> li; for(int i=1;i<8;++i) ve.push_back(i); for(int j=3;j<10;j++) li.insert(li.end(),j); cout<<"vector:"<<endl; print(ve); cout<<"list:"<<endl; print(li); cout<<endl; //equal比较区间元素是否相等 bool xc=equal(ve.begin(),ve.end(),li.begin()); if(xc) cout<<"相等!!!"<<endl; else cout<<"不相等!!!"<<endl; cout<<endl; //使用谓词比较 if(equal(ve.begin(),ve.end(),li.begin(),both)) cout<<"奇偶对应!!!"<<endl; else cout<<"奇偶不对应!!!"<<endl; cout<<endl; //mismatch比较找出不相同的位置 //返回值为pair pair<vector<int>::iterator,list<int>::iterator> xc1; xc1=mismatch(ve.begin(),ve.end(),li.begin()); if(xc1.first==ve.end()) { cout<<"没有不相同的位置!!!"<<endl;//但两个区间不一定相等 } else { cout<<"找到不相等的数:"<<*xc1.first<<" and "<<*xc1.second<<endl; } cout<<endl; //mismatch使用谓词 xc1=mismatch(ve.begin(),ve.end(),li.begin(),less_equal<int>());//使用函数预定义(小于等于) if(xc1.first==ve.end()) cout<<"没有找到(没有大于的数)!!!"<<endl; else cout<<"找到大于的数:"<<*xc1.first<<" and "<<*xc1.second<<endl; cout<<endl; //lexicographical_compare()检查第一个区间是否小于第二个区间 bool tx; tx=lexicographical_compare(ve.begin(),ve.end(),li.begin(),li.end()); if(tx) cout<<"ve<li"<<endl; else cout<<"ve>=li"<<endl; return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<" "; ++i; } cout<<endl; } bool both(int elem1,int elem2) { return elem1%2==elem2%2;//判断两个容器相应位置是否同为奇偶数 } #endif
复制元素
#if 0 /*复制元素*/ #include<iostream> #include<algorithm> #include<vector> #include<list> using namespace std; template<typename Container> void print(const Container &c);//模板函数 int main() { list<int> li; for(int i=0;i<10;++i) li.push_back(i); cout<<"list(li):"<<endl; print(li); cout<<endl; //vector vector<int> ve(li.size()*2);//存放20个数 cout<<"vector(ve):"<<endl; print(ve); cout<<endl; //copy copy(li.begin(),li.end(),ve.begin()); cout<<"li-ve:"<<endl; print(ve); cout<<endl; //copy_backward copy_backward(li.begin(),li.end(),ve.end()); cout<<"li-ve(1):"<<endl; print(ve); cout<<endl; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<" "; ++i; } cout<<endl; } #endif
copy()
#if 0 /*copy*/ #include<iostream> #include<algorithm> #include<vector> #include<list> using namespace std; template<typename Container> void print(const Container &c);//模板函数 int main() { vector<int> ve; //list<int> li(9); list<int> li; for(int i=1;i<10;++i) ve.push_back(i); cout<<"vector(ve):"<<endl; print(ve); cout<<endl; //copy(ve.begin(),ve.end(),li.begin()); copy(ve.begin(),ve.end(),back_inserter(li)); cout<<"ve-list:"<<endl; print(li); cout<<endl; //拷贝到输出流 copy(ve.begin(),ve.end(),ostream_iterator<int>(cout," ")); cout<<endl; cout<<endl; //逆向 copy(ve.rbegin(),ve.rend(),li.begin()); //显示copy(li.begin(),li.end(),ostream_interator<int>(cout," ")); cout<<"copy(逆向):"<<endl; print(li); cout<<endl; return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<" "; ++i; } cout<<endl; } #endif
char copy
#if 0 /*char copy*/ #include<iostream> #include<vector> #include<algorithm> using namespace std; template<typename Container> void print(const Container &c);//模板函数 int main() { vector<char> ve(10,'.'); for(int i='a';i<'g';++i)//for(char i='a';i<'g';++i) { ve.push_back(i); } ve.insert(ve.end(),10,'.'); cout<<"ve:"<<endl; print(ve); cout<<endl; //copy vector<char> ve1(ve.begin(),ve.end()); cout<<"ve1:"<<endl; print(ve1); cout<<endl; //限定区间拷贝 copy(ve1.begin()+10,ve1.begin()+16,ve1.begin()+7); cout<<"ve1(new):"<<endl; print(ve1); cout<<endl; //ve2 vector<char> ve2(ve.begin(),ve.end()); cout<<"ve2:"<<endl; print(ve2); cout<<endl; //copy copy(ve2.begin()+10,ve2.begin()+16,ve2.begin()+19); cout<<"ve2(new):"<<endl; print(ve2); cout<<endl; return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<" "; ++i; } cout<<endl; } #endif
transform()
#if 0 /*transform*/ #include<iostream> #include<vector> #include<list> #include<algorithm> using namespace std; template<typename Container> void print(const Container &c);//模板函数 int main() { vector<int> ve; list<int> li; for(int i=1;i<10;++i) ve.push_back(i); cout<<"ve:"<<endl; print(ve); cout<<endl; //transform transform(ve.begin(),ve.end(),ve.begin(),negate<int>());//取负 cout<<"-ve:"<<endl; print(ve); cout<<endl; // transform(ve.begin(),ve.end(),back_inserter(li),bind2nd(multiplies<int>(),5));//ve乘5 cout<<"li(ve*5):"<<endl; print(li); cout<<endl; //流迭代器 cout<<"ve(cout):"<<endl; transform(li.begin(),li.end(),ostream_iterator<int>(cout," "),negate<int>()); cout<<endl; return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<" "; ++i; } cout<<endl; } #endif
集合的合并
#if 0 /*多个集合进行运算合并到一个集合*/ #include<iostream> #include<vector> #include<list> #include<algorithm> using namespace std; template<typename Container> void print(const Container &c);//模板函数 int main() { vector<int> ve; vector<int> ve1; list<int> li; for(int i=1;i<10;++i) ve.push_back(i); for(int j=11;j<20;++j) ve1.push_back(j); cout<<"ve:"<<endl; print(ve); cout<<endl; cout<<"ve1:"<<endl; print(ve1); cout<<endl; //transform(b1,e1,b2,b3,op) ve*ve transform(ve.begin(),ve.end(),ve.begin(),ve.begin(),multiplies<int>()); cout<<"ve(new):"<<endl; print(ve); cout<<endl; //ve1*ve(new) transform(ve.begin(),ve.end(),ve1.begin(),ve1.begin(),multiplies<int>()); cout<<"ve1(new):"<<endl; print(ve1); cout<<endl; //ve1(new)+ve(new)=li transform(ve.begin(),ve.end(),ve1.begin(),back_inserter(li),plus<int>()); cout<<"li:"<<endl; print(li); cout<<endl; return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<" "; ++i; } cout<<endl; } #endif
排列组合
#if 0 /*排列组合*/ #include<iostream> #include<vector> #include<algorithm> using namespace std; template<typename Container> void print(const Container &c);//模板函数 int main() { vector<int> ve; ve.push_back(1); ve.push_back(2); ve.push_back(3); cout<<"ve:"<<endl; print(ve); cout<<endl; /* //next_permutation() 1 next_permutation(ve.begin(),ve.end()); cout<<"ve(1):"<<endl; print(ve); cout<<endl; //next_permutation() 2 next_permutation(ve.begin(),ve.end()); cout<<"ve(2):"<<endl; print(ve); cout<<endl;*/ cout<<"排列为(1,2,3):"<<endl; while(next_permutation(ve.begin(),ve.end()))//返回值为bool { print(ve); } cout<<endl; vector<int> ve1; ve1.push_back(3); ve1.push_back(1); ve1.push_back(2); cout<<"ve1:"<<endl; print(ve1); cout<<endl; //prev_permulation() 降序 /*prev_permutation(ve1.begin(),ve1.end()); cout<<"排列1:"<<endl; print(ve1); cout<<endl; print(ve1);*/ cout<<"排列为(3,1,2):"<<endl; while(prev_permutation(ve1.begin(),ve1.end())) { print(ve1); } cout<<endl; return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<" "; ++i; } cout<<endl; } #endif
交换算法
#if 0 /*交换算法*/ #include<iostream> #include<vector> #include<deque> #include<algorithm> using namespace std; template<typename Container> void print(const Container &c);//模板函数 int main() { vector<int> ve; deque<int> de; for(int i=1;i<10;++i) ve.push_back(i); cout<<"ve:"<<endl; print(ve); cout<<endl; for(int j=11;j<24;++j) de.push_back(j); cout<<"de:"<<endl; print(de); cout<<endl; //swap_ranges()交换相同的字节数(灵活) swap_ranges(ve.begin(),ve.end(),de.begin()); cout<<"ve(new):";print(ve); cout<<"de(new):";print(de); cout<<endl; //swap_ranges()返回值为迭代器(第二个容器内没有交换的数) deque<int>::iterator xc; xc=swap_ranges(ve.begin(),ve.end(),de.begin()); if(xc!=de.end()) { cout<<"还有数据未交换!!!"<<endl; cout<<"第一个没有交换的数:"<<*xc<<endl;//未交换第一个数 } else { cout<<"所有数据都已经交换!!!"<<endl; } cout<<endl; //分段交换 swap_ranges(de.begin(),de.begin()+3,de.rbegin()); cout<<"分段交换:"; print(de); cout<<endl; vector<int> ve1; vector<int> ve2; ve1.push_back(2); ve1.push_back(8); ve1.push_back(10); ve2.push_back(23); ve2.push_back(33); ve2.push_back(43); cout<<"ve1:";print(ve1); cout<<"ve2:";print(ve2); //cout<<ve1.at(1);//显示 cout<<endl; //赋值操作进行互换 //ve1=ve2;//速度慢 //使用swap成员函数,速度最快 ve1.swap(ve2); cout<<"ve1(new):";print(ve1); cout<<"ve2(new):";print(ve2); return 0; } //display template<typename Container> void print(const Container &c)//模板函数 { Container::const_iterator i=c.begin(); while(i!=c.end()) { cout<<*i<<" "; ++i; } cout<<endl; } #endif
相关文章推荐
- 第六次作业
- C++ STL-查找实例
- C++第六次上机作业
- leetcode #31 in cpp
- leetcode #30 in cpp
- C++第六次实验-矩阵求和
- C++ STL中Map的按Key排序和按Value排序
- ZeroMQ无锁队列分析
- c++第六次实验 项目二:数组合并与排序。
- c++ STL sort struct comp
- c++作业6
- c++实验6-矩阵求和
- C++作业6
- C++实验6-项目1 数组操作
- 使用ICE建立C++与C#的通讯
- C++实验6作业
- C++基础知识学习:变量的初始化
- C语言 整形和字符
- ROS_Kinetic_10 ROS程序基础Eclipse_C++(一)
- ROS_Kinetic_10 ROS程序基础Eclipse_C++(一)