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++編を作成中です。
問題① 次のようなクラスがあります。
template <typename T>
class DataStoreArray {
public:
void Push(const T& data)
{
.push_back(data);
mVec}
private:
std::vector<T> mVec;
};
このクラスに、保持している要素を、STLコンテナにコピーして返すようなテンプレート変換演算子を追加してください(map はキーと値のペアが必要になるので省いて良いです)。つまり、以下の変換を可能にしてください。
<int> store;
DataStoreArray
std::vector<int> v = store;
std::list<int> l = store;
std::set<int> s = store;
次のように、テンプレート変換演算子を定義すれば良いでしょう。
template <typename T>
class DataStoreArray {
public:
template <typename U>
operator U() const
{
return U(mVec.begin(), mVec.end());
}
};
各STLコンテナのコンストラクタは、イテレータのペアを使って初期値を指定できるので、これを利用すれば簡単なコードで済みます。
これがあれば、以下のコードが動作します。
#include <iostream>
#include <vector>
#include <list>
#include <set>
template <typename T>
class DataStoreArray {
public:
void Push(const T& data)
{
.push_back(data);
mVec}
template <typename U>
operator U() const
{
return U(mVec.begin(), mVec.end());
}
private:
std::vector<T> mVec;
};
template <typename T>
void Print(const T& container)
{
const T::const_iterator itEnd = container.end();
for (T::const_iterator it = container.begin(); it != itEnd; ++it) {
std::cout << *it << "\n";
}
std::cout << std::endl;
}
int main()
{
<int> store;
DataStoreArray.Push(3);
store.Push(5);
store.Push(7);
store
std::vector<int> v = store;
std::list<int> l = store;
std::set<int> s = store;
(v);
Print(l);
Print(s);
Print}
実行結果:
3
5
7
3
5
7
3
5
7
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |