トップページ – Modern C++編 C++編](../../index.html) – 第7章
問題① 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'};
(a1);
PrintArray(a2);
PrintArray}
実行結果:
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;
.fill(value);
arrayreturn array;
}
int main()
{
std::array<int, 5> a1 = CreateArray<int, 5>(100);
std::array<char, 3> a2 = CreateArray<char, 3>('A');
(a1);
PrintArray(a2);
PrintArray}
実行結果:
100
100
100
100
100
A
A
A
CreateArray関数テンプレートを呼び出すときに、型名と要素数を2回書いていますが、型推論(【言語解説】第20章)の機能が使えるのなら、結果を受け取る変数の型名は auto にできます。
C++11 で、初期化時の {} が2組必要であったのは、直接初期化に限られるようなので、それに合わせて解説とサンプルプログラムを修正。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |