C++范型程序补充阅读
来源:互联网 发布:福州seo顾问 编辑:程序博客网 时间:2024/05/16 07:55
(1)下面程序通过输入流迭代器来填充vector容器,通过输出流迭代器来写入“流cout”。程序执行时,如果输入为:1 2 3 4 5 q
则输出为:1,2,3,4,5,
1 | 2 | 3 | 4 | 5 |
请填空将程序补充完整。
#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ vector<int> col1; istream_iterator<int> intreader(cin),eof;; while(intreader!=eof) { col1.push_back(_______________); // (1) _______________; // (2) } _______________ intwriter(cout,","); // (3) copy(col1.begin(),col1.end(),intwriter); cout<<endl; copy(col1.begin(),col1.end(),_______________); // (4) cout<<endl; return 0;}
参考解答:
(1)*intreader (2)++intreader
(3)ostream_iterator (4)ostream_iterator(cout,” | “)
等价程序:
#include<iostream>#include<vector>#include<algorithm>#include<iterator>using namespace std;int main(){ vector<int> col1(5); copy(istream_iterator<int>(cin),istream_iterator<int>(),col1.begin()); ostream_iterator<int> intwriter(cout,","); copy(col1.begin(),col1.end(),intwriter); cout<<endl; copy(col1.begin(),col1.end(),ostream_iterator<int>(cout,"|")); cout<<endl; return 0;}
(2)set用法
#include <algorithm>#include<set>#include<iterator>#include<iostream>using namespace std;int main(){ set<int>eg1;//插入 eg1.insert(1); eg1.insert(100); eg1.insert(5); eg1.insert(1);//元素1因为已经存在所以set中不会再次插入1 eg1.insert(10); eg1.insert(9);//遍历set,可以发现元素是有序的 set<int>::iterator set_iter=eg1.begin(); cout<<"Set named eg1:"<<endl; for(; set_iter!=eg1.end(); set_iter++) cout<<*set_iter<<" "; cout<<endl;//使用size()函数可以获得当前元素个数 cout<<"Now there are "<<eg1.size()<<" elements in the set eg1"<<endl; if(eg1.find(200)==eg1.end())//find()函数可以查找元素是否存在 cout<<"200 isn't in the set eg1"<<endl; set<int>eg2; for(int i=6; i<15; i++) eg2.insert(i); cout<<"Set named eg2:"<<endl; for(set_iter=eg2.begin(); set_iter!=eg2.end(); set_iter++) cout<<*set_iter<<" "; cout<<endl;//获得两个set的并 set<int>eg3; cout<<"Union:"; set_union(eg1.begin(),eg1.end(),eg2.begin(),eg2.end(), insert_iterator<set<int> >(eg3,eg3.begin()));//注意第五个参数的形式 copy(eg3.begin(),eg3.end(),ostream_iterator<int>(cout," ")); cout<<endl;//获得两个set的交,注意进行集合操作之前接收结果的set要调用clear()函数清空一下 eg3.clear(); set_intersection(eg1.begin(),eg1.end(),eg2.begin(),eg2.end(),insert_iterator<set<int> >(eg3,eg3.begin())); cout<<"Intersection:"; copy(eg3.begin(),eg3.end(),ostream_iterator<int>(cout," ")); cout<<endl;//获得两个set的差 eg3.clear(); set_difference(eg1.begin(),eg1.end(),eg2.begin(),eg2.end(),insert_iterator<set<int> >(eg3,eg3.begin())); cout<<"Difference:"; copy(eg3.begin(),eg3.end(),ostream_iterator<int>(cout," ")); cout<<endl;//获得两个set的对称差,也就是假设两个集合分别为A和B那么对称差为AUB-A∩B eg3.clear(); set_symmetric_difference(eg1.begin(),eg1.end(),eg2.begin(),eg2.end(),insert_iterator<set<int> >(eg3,eg3.begin())); copy(eg3.begin(),eg3.end(),ostream_iterator<int>(cout," ")); cout<<endl; return 0;}
(3)multiset
#include <algorithm>#include<set>#include<iterator>#include<iostream>using namespace std;int main(){ multiset<int>eg1;//插入 eg1.insert(1); eg1.insert(100); eg1.insert(5); eg1.insert(1);//是否插入 eg1.insert(10); eg1.insert(9);//遍历set,可以发现元素是有序的 multiset<int>::iterator set_iter=eg1.begin(); cout<<"Set named eg1:"<<endl; for(; set_iter!=eg1.end(); set_iter++) cout<<*set_iter<<" "; cout<<endl;//使用size()函数可以获得当前元素个数 cout<<"Now there are "<<eg1.size()<<" elements in the set eg1"<<endl; if(eg1.find(200)==eg1.end())//find()函数可以查找元素是否存在 cout<<"200 isn't in the set eg1"<<endl; return 0;}
(4)理解map
#include <algorithm>#include<map>#include<iterator>#include<iostream>#include<cstring>using namespace std;struct ltstr{ bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; }};int main(){ map<const char*, int, ltstr> months; months["january"] = 31; months["february"] = 28; months["march"] = 31; months["april"] = 30; months["may"] = 31; months["june"] = 30; months["july"] = 31; months["august"] = 31; months["september"] = 30; months["october"] = 31; months["november"] = 30; months["december"] = 31; cout << "june -> " << months["june"] << endl; map<const char*, int, ltstr>::iterator cur = months.find("june"); map<const char*, int, ltstr>::iterator prev = cur; map<const char*, int, ltstr>::iterator next = cur; ++next; --prev; cout << "Previous (in alphabetical order) is " << (*prev).first << endl; cout << "Next (in alphabetical order) is " << (*next).first << endl; return 0;}
(5)map再例
#include <map>#include <iostream>using namespace std;int main( ){ map <int, int> m1, m2, m3; map <int, int>::iterator m1_Iter; m1.insert ( pair <int, int> ( 1, 10 ) ); m1.insert ( pair <int, int> ( 2, 20 ) ); m1.insert ( pair <int, int> ( 3, 30 ) ); m2.insert ( pair <int, int> ( 10, 100 ) ); m2.insert ( pair <int, int> ( 20, 200 ) ); m3.insert ( pair <int, int> ( 30, 300 ) ); cout << "The original map m1 is:"; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << " " << m1_Iter->second; cout << "." << endl; // This is the member function version of swap //m2 is said to be the argument map; m1 the target map m1.swap( m2 ); cout << "After swapping with m2, map m1 is:"; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << " " << m1_Iter -> second; cout << "." << endl; cout << "After swapping with m2, map m2 is:"; for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ ) cout << " " << m1_Iter -> second; cout << "." << endl; // This is the specialized template version of swap swap( m1, m3 ); cout << "After swapping with m3, map m1 is:"; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << " " << m1_Iter -> second; cout << "." << endl; return 0;}
(6)map三例
#include <algorithm>#include<map>#include<iterator>#include<iostream>#include<cstring>using namespace std;int main(){ map<char,int> mymap; mymap['a']=10; mymap['b']=60; mymap['c']=30; mymap['d']=90; mymap['e']=50; map<char,int> second(mymap); map<char,int> third(mymap.begin(),mymap.end()); map<char,int>::key_compare key_comp; map<char,int>::iterator it; it=mymap.begin(); for (;it!=mymap.end();it++) { cout<<it->first<<":"<<it->second<<endl; } cout<<"================================="<<endl; second.clear(); second['a']=1002; second['b']=10023; while (!second.empty()) { cout << second.begin()->first << " => "; cout << second.begin()->second << endl; second.erase(second.begin()); } cout<<"================================="<<endl; mymap.insert(pair<char,int>('f',100) ); mymap.insert(pair<char,int>('g',200) ); cout<<"f => " <<mymap.find('f')->second<<endl; cout<<"g => " <<mymap.find('g')->second<<endl; cout<<"================================="<<endl; key_comp=mymap.key_comp(); cout << "mymap contains:\n"; char highest=mymap.rbegin()->first; // key value of last element it=mymap.begin(); do { cout << (*it).first << " => " << (*it).second << endl; } while ( key_comp((*it++).first, highest) ); cout << endl; return 0;}
0 0
- C++范型程序补充阅读
- C++范型程序补充阅读
- 第十五周c++范型程序补充阅读(1)
- 第十五周C++范型程序补充阅读(2)
- 第十五周C++范型程序补充阅读(3)
- 阅读程序补充-1
- 补充阅读程序-2
- 补充阅读程序-4
- 第十二周 阅读程序-补充
- 第十二周补充阅读程序
- 第十六周 程序阅读(补充阅读)
- 第十一周阅读程序(补充)----(1)
- 继承与派生阅读程序补充
- 第十二周阅读程序——补充阅读
- 阅读程序c
- 第十一周阅读程序(补充)----(2)
- 第十一周阅读程序(补充)----(3)
- 第十一周阅读程序(补充)----(3.2)
- rac修改私有IP
- CentOS shell中知识
- STL系列之queue 单向队列解析
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID,UUID分别是什么含义?
- filter:progid:DXImageTransform.Microsoft.AlphaImageLoader
- C++范型程序补充阅读
- linux命令详解——eval
- linux下 gearman+php的使用
- CALayer的渲染架构、事务管理、时间系统的理解
- easyui-dialog 设置 top 内部面板跑出
- android TextView加载html内容并加载图片
- C#在线学习地方,收藏一下
- h264 sps解析,提取宽高
- UIwindow 窗体初始化