データ構造とアルゴリズム-007(C++データ構造まとめ)


1.vector 1.1概要vectorは、様々なタイプのオブジェクトを格納できるコンテナと見なすことができ、簡単に言えば、vectorは任意のタイプを格納できる動的配列である.1.2注意事項(1)ベクトル長を長く表す(ベクトル内部に多くの数を保存する必要がある)場合は、メモリの漏洩を招きやすく、効率が低下します.(2)Vectorが関数のパラメータや戻り値として使用される場合は、書き方に注意してください.
1.3使用
#include
#include
#include
using namespace std;
int main()
{
	//  vector
	cout << "**********  **********" << endl;
	vector v1;//    
	cout << boolalpha << v1.empty() << endl;//      
	cout << v1.size() << endl;//   0
	vector v2(3, 0);//  3  ,  0
	for (vector::iterator iter = v2.begin(); iter != v2.end(); iter++)
	{
		cout << *iter< v3;
	cout << "v.size() == " << v3.size() << " v.capacity() = " << v3.capacity() << endl;//0,0:   ,      ,         
	v3.reserve(10);
	cout << "v.size() == " << v3.size() << " v.capacity() = " << v3.capacity() << endl;//0,10:  10      ,          ,  []         
	v3.resize(10);
	v3.push_back(0);
	cout << "v.size() == " << v3.size() << " v.capacity() = " << v3.capacity() << endl;//11,15:size=capacity , push    ,            ,        ,        ,            
	//    
	cout << "********    ********" << endl;
	vector v4;
	v4.push_back(1);//    
	for (vector::iterator iter = v4.begin(); iter != v4.end(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;
	v4.insert(v4.begin(), 0);//      
	v4.insert(v4.begin(), 4, 3);//      4 3
	for (vector::iterator iter = v4.begin(); iter != v4.end(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;
	v4.insert(v4.end(),v4.begin(), v4.end());;//    v4
	for (vector::iterator iter = v4.begin(); iter != v4.end(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;
	//    
	cout << "********    ********" << endl;
	v4.erase(v4.begin());//        
	v4.erase(v4.begin(), v4.end());//      
	cout << v4.size() << endl;
	v4.clear();//  
	//  
	cout << "********    ********" << endl;
	vector v5;
	v5.push_back(0);
	cout << v5[0] << endl;//A
	cout << v5.at(0) << endl;//B
	//   v5  ,A  B       。  v  ,B    std::out_of_range  ,A       。          ,  at

	//assign  
	cout << "******  assign******" << endl;
	vector v6(4, 0);
	vector v7;
	v7.assign(3, 4);//    
	for (vector::iterator iter = v7.begin(); iter != v7.end(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;
	v7.assign(v6.begin(), v6.end());//    vector    
	for (vector::iterator iter = v7.begin(); iter != v7.end(); iter++)
	{
		cout << *iter < v8;
	v8.push_back(1);
	v8.push_back(5);
	v8.push_back(4);
	v8.push_back(2);
	v8.push_back(3);
	for (vector::iterator iter = v8.begin(); iter != v8.end(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;
	reverse(v8.begin(), v8.end());//  ,  #include
	for (vector::iterator iter = v8.begin(); iter != v8.end(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;
	sort(v8.begin(), v8.end()); //  
	for (vector::iterator iter = v8.begin(); iter != v8.end(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;
	//        ,       
	bool comp(const int &a, const int &b);
	sort(v8.begin(), v8.end(),comp); //  
	for (vector::iterator iter = v8.begin(); iter != v8.end(); iter++)
	{
		cout << *iter << " ";
	}
	cout << endl;
	//    
	cout << "********    ********" << endl;
	vector> v9;
	vector v9_0(3, 4);
	vector v9_1(3, 6);
	v9.push_back(v9_0);
	v9.push_back(v9_1);
	for (int i = 0; i < v9.size();i++)
	{
		for (int j = 0; j < v9[0].size();j++)
			cout << v9[i][j]<< " ";
		cout << endl;
	}
	cout << endl;
	system("pause");
}
bool comp(const int &a, const int &b)
{
	return a > b;
}

2.queue 2.1概要queueテンプレートクラスには、2つのテンプレートパラメータが必要です.1つは要素タイプ、1つはコンテナタイプ、要素タイプが必要です.コンテナタイプはオプションで、デフォルトはdequeタイプです.2.2基本操作入隊、例:q.push(x);xをキューの末端に接続します.例:q.pop();キューの最初の要素をポップアップします.ポップアップされた要素の値は返されません.例:q.front()、すなわち最も早くキューに押し込まれた要素などのキューヘッダ要素にアクセスします.例:q.back()のようなキューの最後の要素にアクセスします.つまり、最後にキューに押し込まれた要素です.例:q.empty()のようにキューが空であると判断し、キューが空であるとtrueを返す.例:q.size()などのアクセスキュー内の要素の数
2.3使用
#include
#include
using namespace std;
int main()
{
	int e;
	queue < int > q1;
	for (int i = 0; i<10; i++)
		q1.push(i);
	for (int i = 0; i < q1.size(); i++)
	{
		e = q1.front();//      
		cout << e << " ";
		q1.pop();//     
		q1.push(e);//       
	}	
	cout << endl;
	cout <

3.stack 3.1概要先進後3.2基本操作empty()スタックが空の場合は真pop()スタックトップ要素を除去(スタックトップ要素の値を返さない)push()スタックトップに要素size()を追加してスタック内の要素数top()スタックトップ要素を返す
3.3使用
#include 
# include 
using namespace std;
void reverseStack(stack  &s);
void printStack(stack &st);
void main()
{
	stack st;
	//       st,          0,1,2,3,4,
	cout << "  :";
	for (int i = 0; i <5; i++)
	{
		st.push(i);
		cout << i << " ";
	}
	cout << endl;
	//  
	//              ,   4,3,2,1,0
	cout << "  :";
	printStack(st);
	cout << "  :";
	for (int i = 0; i <5; i++)
	{
		st.push(i);
		cout << i << " ";
	}
	cout << endl;
	reverseStack(st);
	cout << "  :";
	printStack(st);
	system("pause");

}
void reverseStack(stack  &s)
{

	//             ,             
	if (s.empty())
		return;
	else {
		//  s        ,   ,      。
		//      pop    ,          。
		int a = s.top();
		s.pop();
		if (s.empty()){
			s.push(a);
			return;
		}
		else{
			s.push(a);
		}
	}

	//     
	int temp1 = s.top();
	s.pop();
	reverseStack(s);
	int temp2 = s.top();
	s.pop();
	reverseStack(s);
	s.push(temp1);
	reverseStack(s);
	s.push(temp2);
}
void printStack(stack &st)
{
	while (!st.empty())
	{
		cout << st.top() << " ";
		st.pop();
	}
	cout << endl;
}