array 解答ページ | Programming Place Plus Modern C++編【標準ライブラリ】 第7章

トップページModern C++編 C++編](../../index.html) – 第7章

Modern C++編は作りかけで、更新が停止しています。代わりに、C++14 をベースにして、その他の方針についても見直しを行った、新C++編を作成しています。
Modern C++編は削除される予定です。

問題①

問題① std::array の各要素の値を標準出力へ出力する関数テンプレートを作成してください。要素の型と要素数がどのように指定されていても使用できるように実装してください。どのようなフォーマットで出力するかは自由に決めて構いません。


たとえば、次のようになります。

#include <array>
#include <iostream>

namespace {
    template <typename T, std::size_t N>
    void PrintArray(const std::array<T, N>& a) {
        for (T v : a) {
            std::cout << v << "\n";
        }
        std::cout << std::endl;
    }
}

int main()
{
    std::array<int, 5> a1 = {0, 1, 2, 3, 4};
    std::array<char, 3> a2 = {'a', 'b', 'c'};

    PrintArray(a1);
    PrintArray(a2);
}

実行結果:

0
1
2
3
4

a
b
c

問題②

問題② 要素の型が T、要素数が N の std::array を生成して返す関数テンプレートを作成してください。なお、実引数には、すべての要素に与える共通の初期値を指定できるようにしてください。


たとえば、次のようになります。問題①で作った PrintArray も使っています。

#include <array>
#include <iostream>

namespace {
    template <typename T, std::size_t N>
    void PrintArray(const std::array<T, N>& a) {
        for (T v : a) {
            std::cout << v << "\n";
        }
        std::cout << std::endl;
    }
}

template <typename T, std::size_t N>
std::array<T, N> CreateArray(T value)
{
    std::array<T, N> array;
    array.fill(value);
    return array;
}

int main()
{
    std::array<int, 5> a1 = CreateArray<int, 5>(100);
    std::array<char, 3> a2 = CreateArray<char, 3>('A');

    PrintArray(a1);
    PrintArray(a2);
}

実行結果:

100
100
100
100
100

A
A
A

CreateArray関数テンプレートを呼び出すときに、型名と要素数を2回書いていますが、型推論(【言語解説】第20章)の機能が使えるのなら、結果を受け取る変数の型名は auto にできます。



参考リンク


更新履歴

’2017/12/9 C++11 で、初期化時の {} が2組必要であったのは、直接初期化に限られるようなので、それに合わせて解説とサンプルプログラムを修正。

’2017/11/30 新規作成。



第7章のメインページへ

Modern C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る