#include <iostream>
#include <deque>
using namespace std;
void print(string str, deque<int> &q) {
if (q.empty())
cout << " コンテナ " << str << " は空です\n";
else {
cout << str << " の要素数: " << q.size() << endl;
for (auto x : q)
cout << " " << x;
// for (int i1 = 0; i1 < (int)q.size(); i1++)
// cout << " " << q[i1];
cout << endl;
}
}
int main()
{
// 要素を最後に追加(サイズは自動的に増加)
// deque<int> q1 = {0, 1, 2, 3, 4};
// deque<int> q1 {0, 1, 2, 3, 4};
deque<int> q1;
for(int i1 = 0; i1 < 5; i1++)
q1.push_back(i1);
cout << "**初期設定**\n";
print("q1", q1);
// 2 番目の要素の前,及び,先頭に要素を追加
deque<int>::iterator it = q1.begin() + 1;
q1.emplace(it, 5);
// q1.insert(it, 5);
q1.emplace_front(-1);
// q1.push_front(-1);
cout << "**2 番目の要素の前,及び,先頭に要素を追加**\n";
print("q1", q1);
// 3 番目の要素,最初,及び,最後の要素を削除
it = q1.begin() + 2;
q1.erase(it);
q1.pop_front();
q1.pop_back();
cout << "**3 番目の要素,最初,及び,最後の要素を削除**\n";
print("q1", q1);
// 演算子で比較
cout << "**演算子で比較**\n";
deque<int> q2 = {0, 1, 2, 3}; // 初期化子リストの利用
// deque<int> q2 {0, 1, 2, 3}; // 初期化子リストの利用
print("q2", q2);
if (q1 == q2)
cout << " 2 つのコンテナ内の要素はすべて等しい\n";
// q2 の最初の 3 つの要素を q1 に代入
cout << "**q2 の最初の 3 つの要素を q1 に代入**\n";
q1.assign(q2.begin(), q2.end()-1);
// q1.assign({0, 1, 2});
print("q1", q1);
// q1 と q2 を入れ替える
cout << "**q1 と q2 を入れ替える**\n";
print("入れ替え前:q1", q1);
print("入れ替え前:q2", q2);
q1.swap(q2);
print("q1", q1);
print("q2", q2);
// q1 のすべての要素を削除
cout << "**q1 すべての要素を削除**\n";
q1.clear();
print("q1", q1);
return 0;
}