#include <iostream>
#include <vector>
using namespace std;
void print(string str, vector<int> &v) {
if (v.empty())
cout << " コンテナ " << str <<" は空です\n";
else {
cout << str << " の要素数: " << v.size() << endl;
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++)
cout << " " << *it;
cout << endl;
}
}
int main()
{
// 要素を最後に追加(サイズは自動的に増加)
cout << "**初期設定**\n";
vector<int> v1 = {0, 1, 2, 3, 4};
print("v1", v1);
// 配列と同様の参照も可能
cout << "**参照**\n";
for (int i1 = 0; i1 < 5; i1++)
cout << " " << v1[i1];
// cout << " " << v1.at(i1);
cout << endl;
// 2 番目の要素の前に要素を追加
cout << "**2 番目の要素の前に要素を追加**\n";
vector<int>::iterator it = v1.begin();
it++;
v1.insert(it, 5);
print("v1", v1);
// 3 番目の要素と最後の要素を削除
cout << "**3 番目の要素と最後の要素を削除**\n";
it = v1.begin();
it++;
it++;
v1.erase(it);
v1.pop_back();
print("v1", v1);
// 演算子で比較
cout << "**比較**\n";
vector<int> v2;
for(int i1 = 0; i1 < 4; i1++)
v2.push_back(i1);
v2.at(1) = 5; // 要素 1 の値を変更
print("v2", v2);
if (v1 == v2)
printf(" 2 つのコンテナ内の要素はすべて等しい\n");
// v2 の最初の 3 つの要素を v1 に代入
cout << "**v2 の最初の 3 つの要素を v1 に代入**\n";
v1.assign(v2.begin(), v2.end()-1);
print("v1", v1);
// v1 と v2 を入れ替える
cout << "**v1 と v2 を入れ替える**\n";
print("入れ替え前:v1", v1);
print("入れ替え前:v2", v2);
v1.swap(v2);
print("v1", v1);
print("v2", v2);
// v1 のすべての要素を削除
cout << "**v1 のすべての要素を削除**\n";
v1.clear();
print("v1", v1);
return 0;
}