C++編で扱っている C++ は 2003年に登場した C++03
という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14
-> C++17 -> C++20 -> C++23 と更新されています。
なかでも 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:
(const MyClass&);
MyClass& operator=(const MyClass&);
MyClass
private:
int mValue;
};
int main()
{
(5);
MyClass c1(10);
MyClass c2
std::swap(c1, c2);
std::cout << c1.GetValue() << "\n"
<< c2.GetValue() << std::endl;
}
std::swap関数が交換処理を行うには、コピーコンストラクタとコピー代入が必要になります。これは、典型的には次のように実装されるためです。
template <typename T>
inline swap(T& a, T& b)
{
(a);
T tmp= b;
a = tmp;
b }
そのため、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
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |