ユーティリティ 解答ページ | Programming Place Plus C++編【標準ライブラリ】 第15章

トップページC++編

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 と更新されており、今後も 3年ごとに更新されます。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

問題①

問題① コピー操作の可否によって、std::swap関数の使用の可否が変化することを確認してください。


#include <iostream>
#include <algorithm>

class MyClass {
public:
    explicit MyClass(int value) : mValue(value)
    {}

    inline int GetValue() const
    {
        return mValue;
    }

private:
    MyClass(const MyClass&);
    MyClass& operator=(const MyClass&);

private:
    int  mValue;
};

int main()
{
    MyClass c1(5);
    MyClass c2(10);

    std::swap(c1, c2);

    std::cout << c1.GetValue() << "\n"
              << c2.GetValue() << std::endl;
}

std::swap関数が交換処理を行うには、コピーコンストラクタとコピー代入が必要になります。これは、典型的には次のように実装されるためです。

template <typename T>
inline swap(T& a, T& b)
{
    T tmp(a);
    a = b;
    b = tmp;
}

そのため、T型のコピーコンストラクタと、代入演算子を必要とする訳です。

問題②

問題② ある型の最小値と最大値のペアを作って返す関数テンプレートを作成してください。


#include <iostream>
#include <limits>
#include <utility>

namespace {

    template <typename T>
    inline const std::pair<T, T> GetMinMaxPair()
    {
        return std::make_pair(
            std::numeric_limits<T>::min(),
            std::numeric_limits<T>::max()
        );
    }

}

int main()
{
    const std::pair<int, int> intLimitsPair = GetMinMaxPair<int>();
    const std::pair<double, double> doubleLimitsPair = GetMinMaxPair<double>();

    std::cout << intLimitsPair.first << ", " << intLimitsPair.second << "\n"
              << doubleLimitsPair.first << ", " << doubleLimitsPair.second << std::endl;

}

実行結果

-2147483648, 2147483647
2.22507e-308, 1.79769e+308


参考リンク


更新履歴

’2016/5/8 新規作成。



第15章のメインページへ

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

Programming Place Plus のトップページへ



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