C++Primer第五版11.2.3節練習(解答)


練習11.12:プログラムを作成し、stringとintのシーケンスを読み込み、各stringとintを1つのpairに格納し、pairは1つのvectorに保存する.
/*
*  11.12.cpp
*2015/9/29
*    :  11.12:    ,  string int   ,   string int    pair ,pair     vector 。 
*  :pair     
*  :Nick Feng
*  :[email protected] 
*/

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    pair<string,int> p;//      pair   
    vectorstring,int>> vec; 
    string word;
    int ival;
    while(cin >> word >> ival )
    {
        p={word,ival};//          
        vec.push_back(p);
    }

    for(int i = 0; i != vec.size();++i)//  vector     
    {
        cout << (vec[i]).first << " " << (vec[i]).second << " " << endl;
    }
    return 0;
} 

練習11.13:前の問題のプログラムでは、少なくとも3つのpairを作成する方法があります.このプログラムの3つのバージョンを作成し、それぞれ異なる方法でpairを作成します.どの形式が最も書きやすく理解しやすいと思いますか.なぜですか.答:それぞれの作成方法はそれぞれの特徴があって、个人はリストの初期化方法が好きで、感じは比较的に便利です
/*
*  11.13.cpp
*2015/9/29
*    :
      11.13:        ,       pair   。          ,           pair。                 ,   ?
      11.12:    ,  string int   ,   string int    pair ,pair     vector 。 
*  :pair        :1.            2.  make_pair    3.           
*  :Nick Feng
*  :[email protected] 
*/

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    pair<string,int> p,p1;//      pair   
    vectorstring,int>> vec,vec2,vec3; 
    string word;
    int ival;
    while(cin >> word >> ival )
    {
        p={word,ival};//1.          
        vec.push_back(p);

        p1=make_pair(word,ival);//2.  make_pair   
        vec2.push_back(p1);

        pair<string,int> p2(word,ival);//3.            
        vec3.push_back(p2); 
    }

    for(int i = 0; i != vec.size();++i)//  vector     
        cout << (vec[i]).first << " " << (vec[i]).second << " " << endl;

    for(int i = 0; i != vec2.size();++i)//  vector     
        cout << (vec2[i]).first << " " << (vec2[i]).second << " " << endl;

    for(int i = 0; i != vec3.size();++i)//  vector     
        cout << (vec3[i]).first << " " << (vec3[i]).second << " " << endl;
    return 0;
} 

練習11.14:11.2.1節の練習(378ページ)で書いた子供の姓を名前のmapに拡張し、pairのvectorを追加し、子供の名前と誕生日を保存します.
/*
*  11.14.cpp
*2015/9/29
*    :
      11.14:    11.2.1   ( 378 )          map,    pair vector,         。
      11.7:    map,        ,    vector,      ( )  。    ,                      。
*  :   pair   ,map    
*  :Nick Feng
*  :[email protected] 
*/

#include 
#include 
#include 
#include 
#include 

using namespace std;

//    Date ,    ,      , Date    ,        
struct Date{
    int year;
    int month;
    int day;
    Date() = default; //       ,     ,        
    Date(int y,int m,int d) : year(y), month(m), day(d)
    {
    }
    void print(){
        cout << year << "-" << month << "-" << day << endl;
    }
};

int main()
{   
    string fname; 
    string name;
    int year,month,day;
    pair<string,Date> p; //pair          

    //      ,   string  ,        
    //      vector   pair            
    map<string,vectorstring,Date>>> family;

    //      ,  , , ,  
    while(cin >> fname >> name >> year >> month >> day)
    {
            Date d(year,month,day);
            p = {name,d};
            family[fname].push_back(p); 
   }

    for(auto &member : family)
    {   
        cout << "Member is:" << " " << endl;
        for(auto it = member.second.begin(); it != member.second.end();++it)
            cout << (*it).first << "." << member.first << " " << (*it).second.year << "-" << (*it).second.month << "-" << (*it).second.day << endl;     
            cout << endl;
    }

    return 0;   
}