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
原创粉丝点击