// 30_30-4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <vector>

using namespace std;

void disp(vector<int> &obj)
{
	for (int i = 0; i < (int)obj.size(); i++) {
		cout << obj[i] << " ";
	}
	cout << '\n';
}

int _tmain(int argc, _TCHAR* argv[])
{
	int i;
	vector<int> v1, v2;
	vector<int>::iterator p, p1, p2;
	vector<int>::reverse_iterator rp;

	cout << "-----(1)値を設定\n";
	for (i = 0; i < 6; i++) {
		v1.push_back(i+100);
	}
	cout << "v1の長さ=" << v1.size() << '\n';

	cout << "-----(2)添字処理でv1内容を表示\n";
	for (i = 0; i < (int)v1.size(); i++) {
		cout << v1[i] << " ";
	}
	cout << '\n';

	cout << "-----(3)反復子処理でv1内容を表示\n";
	for (p = v1.begin(); p != v1.end(); p++) {
		cout << *p << " ";
	}
	cout << '\n';

	cout << "-----(4)逆進反復子処理でv1内容を後ろから表示\n";
	for (rp = v1.rbegin(); rp != v1.rend(); rp++) {
		cout << *rp << " ";
	}
	cout << '\n';

	cout << "-----(5)v1の先頭と末尾の要素を表示\n";
	cout << "front=" << v1.front() << '\n';
	cout << "back=" << v1.back() << '\n';

	cout << "-----(6)v2にassign関数で10個のデータ(初期値88)を設定\n";
	v2.assign(10, 88);
	disp(v2);

	cout << "-----(7)v2にassign関数でv1[2]から3個のデータを設定\n";
	p = v1.begin() + 2;
	v2.assign(p, p+3);
	disp(v2);

	cout << "-----(8)v2にv1を丸コピーし内容表示\n";
	v2 = v1;
	disp(v2);

	cout << "-----(9)v1とv2を比較\n";
	if (v1 == v2) {
		cout << "v1 == v2である\n";
	}
	else {
		cout << "v1 != v2である\n";
	}

	cout << "-----(10)添字処理と反復子処理とat関数でv2内容を変更\n";
	p = v2.begin() + 2;
	*p = 222;
	v2[3] = 333;
	v2.at(4) = 444;
	disp(v2);

	cout << "-----(11)再びv1とv2を比較\n";
	if (v1 == v2) {
		cout << "v1 == v2である\n";
	}
	else {
		cout << "v1 != v2である\n";
	}

	cout << "-----(12)v2の3番目に9999を挿入(insert)\n";
	p = v2.begin() + 3;
	v2.insert(p, 9999);
	disp(v2);

	cout << "-----(13)v2の3番目の要素を削除(erase)\n";
	p = v2.begin() + 3;
	v2.erase(p);
	disp(v2);

	cout << "-----(14)v2の2番目から3個を削除(erase)\n";
	p1 = v2.begin() + 2;
	v2.erase(p1, p1+3);
	disp(v2);

	cout << "-----(15)v2をクリア(clear)\n";
	v2.clear();
	cout << "v2の長さ=" << v2.size() << '\n';

	cout << "-----(16)v2をempty(空)判定する\n";
	if (v2.empty()) {
		cout << "v2は空\n";
	}
	else {
		cout << "v2は空ではない\n";
	}

	cout << "-----(17)v2に0〜9を格納\n";
	for (i = 0; i < 10; i++) {
		v2.push_back(i);
	}
	disp(v2);

	cout << "-----(18)v2の5番目にv1の区間[2,4)の内容を挿入\n";
	p = v2.begin() + 5;
	p1 = v1.begin() + 2;
	p2 = v1.begin() + 4;
	v2.insert(p, p1, p2);
	disp(v2);

	cout << "-----(19)v2の最後の要素を削除\n";
	v2.pop_back();
	disp(v2);

	cout << "-----(20)v2のサイズを8にする\n";
	v2.resize(8);
	disp(v2);

	cout << "-----(21)v2のサイズを12にし、拡張部に-1を入れる\n";
	v2.resize(12, -1);
	disp(v2);

	cout << "-----(22)現在のv1とv2の内容\n";
	cout << "v1: ";
	disp(v1);
	cout << "v2: ";
	disp(v2);

	cout << "-----(23)v1とv2を交換(swap)する\n";
	v1.swap(v2);
	cout << "v1: ";
	disp(v1);
	cout << "v2: ";
	disp(v2);

	MessageBox(NULL, _T("Check Console Window"), L"MessageBox", MB_OK);

	return 0;
}

