《C++Primer》5 th課後練習第三章文字列、ベクトルと配列41~45


練習3.41プログラムを記述し、vectorオブジェクトを整数配列で初期化する.
#include
#include
#include
using namespace std;
int main()
{
    int arr[] = { 1,2,3,4,5 };
    vector<int> vec(begin(arr), end(arr));
    for (auto i : vec)
        cout << i << " ";
    cout << endl;
    return 0;
}

練習3.42整数要素を含むvectorオブジェクトを整数配列にコピーするプログラムを作成します.
#include
#include
#include
using namespace std;
int main()
{
    int arr[] = { 1,2,3,4,5 };
    vector<int> vec(begin(arr), end(arr));
    int arr2[5] = {};
    for (int i = 0; i < 5; i++)
    {
        arr2[i] = vec[i];
        cout << arr2[i] << " ";
    }
    cout << endl;
    return 0;
}

練習3.43は、iaの要素を出力できるように、3つの異なるバージョンのプログラムを作成します.バージョン1では、for文を使用して反復プロセスを管理します.バージョン2とバージョン3では、通常のfor文が使用されます.バージョン2では、下付き演算子が使用され、バージョン3ではポインタが使用されます.また、すべての3つのバージョンのプログラムでは、タイプ別名、autoキーワード、decltypeキーワードは使用できません.
#include
using namespace std;
int main()
{
    int cnt = 1;
    int ia[3][4];
    for (auto p = ia; p != ia + 3; p++)
        for (auto q = *p; q != *p + 4; q++)
            *q = cnt++;
    for (const int(&p)[4] : ia)
        for (int q : p) 
            cout << q << " ";
    cout << endl;

    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 4; j++)
            cout << ia[i][j] << " ";
    cout << endl;

    for (int(*p)[4] = ia; p != ia + 3; p++)
        for (int *q = *p; q != *p + 4; q++)
            cout << *q << " ";
    cout << endl;
    return 0;
}

練習3.44前の練習中のプログラムを書き換え、ループ制御変数のタイプの代わりにタイプ別名を使用する.
#include
using namespace std;
int main()
{
    int cnt = 1;
    int ia[3][4];
    for(auto p = ia; p != ia+3; p++)
        for (auto q = *p; q != *p+4; q++)
            *q = cnt++;
    using int_array = int[4];
    typedef int I;
    for (int_array *p = ia; p != ia + 3; p++)
        for (I *q = *p; q != *p + 4; q++)
            cout << *q << " ";
    cout << endl;
    return 0;
}

3.45でもう一度プログラムを書き換える練習をして、今度はautoキーワードを使います.3.45でもう一度プログラムを書き換える練習をして、今度はautoキーワードを使います.
#include
using namespace std;
int main()
{
    int cnt = 1;
    int ia[3][4];
    for(auto p = ia; p != ia+3; p++)
        for (auto q = *p; q != *p+4; q++)
            *q = cnt++;
    for (auto p = ia; p != ia + 3; p++)
        for (auto q = *p; q != *p + 4; q++)
            cout << *q << " ";
    cout << endl;
    return 0;
}