汎用テンプレートとSTL構文の入門


汎用テンプレートとSTL構文の入門
STLの概要
STLはStandard Template Libraryの略称で、中国語名標準テンプレートライブラリ、HP実験室が開発した一連のソフトウェアの総称である.これはAlexander Stepanov、Meng Lee、David R MusserがHP実験室で働いていたときに開発されたものです.C++規格では、STLは、algorithm、deque、functional、iterator、vector、list、map、memoryの13個のヘッダファイルに編成する.h、numeric、queue、set、stack、utility
Vectorベクトル
Vectorはjavaで自動成長が可能なオブジェクト配列です.スレッドは安全に同期しているが,効率はArrayListより低く,Java開発では非常に少ない.一方,C++標準テンプレートライブラリでは,多様なデータ構造やアルゴリズムを操作できるテンプレートクラスや関数ライブラリであり,データの増加や圧縮が可能である.シーケンシャル・テーブル・データ構造と比較
きほんそうさ
int main(int argc,char *argv[]) {
     
	//        int
	std::vector<int>v;
	// vector   
	for (int i = 0; i < 10; i++) {
     
		v.push_back(i);
	}
	//       
	std::vector<int>::iterator it = v.begin();
	while (it != v.end()) {
     
		std::cout << *it++ << " ";
	}
	return 0;
}

List双方向チェーンテーブル
これはJava言語のLinkedListに似ていますが、下位は双方向チェーンテーブルデータ構造です.リストは、テーブルヘッダ要素に対する操作push_を提供します.front、pop_front、これはvectorが備えていない.vectorとは別の点で、listの反復器には失効はありません.vectorのようにバックアップスペースを保持するのではなく、容量額を超えたときにメモリを再割り当てし、反復器の失効を招きます.Listにはバックアップスペースの概念がなく、1つの要素に出入りすると1つの要素のスペースが申請されるので、反復器は失効しません.
きほんそうさ
int main(int argc,char *argv[]) {
     
	//        int
	std::list<int>v;
	// vector   
	for (int i = 0; i < 10; i++) {
     
		v.push_back(i);
	}
	//       
	std::list<int>::iterator it = v.begin();
	while (it != v.end()) {
     
		std::cout << *it++ << " ";
	}
	return 0;
}

Map
mapの内部には、データを自動的にソートする機能を持つ赤と黒のツリー(厳密ではないバランスのとれた二叉木)が建てられています.
きほんそうさ
int main(int argc,char *argv[]) {
     
    //     map  
    map<int, string> user;

    //      insert    pair
    user.insert(pair<int, string>(1, "   "));

    //      insert    value_type  
    user.insert(map<int, string>::value_type(2, "  "));

    //      "array"    
    user[3] = "  ";
    
    //=======Map   =======
    map<int, string>::iterator iter;
    for (iter = user.begin(); iter != user.end(); iter++){
     
        cout << iter->first << " " << iter->second << endl;
    }

	return 0;
}

汎用テンプレート
テンプレートは汎用プログラミングの基礎であり、汎用プログラミングは任意の特定のタイプとは独立した方法でコードを記述する.テンプレートは、汎用クラスまたは関数を作成する青写真または式です.反復器やアルゴリズムなどのライブラリは、汎用プログラミングの例であり、テンプレートの概念を使用しています.各コンテナには単一の定義があります.例えば、さっき言ったベクトルなど、vectorやvectortemplate <typename T> void function(T a) { cout << " a = " << a << endl; } int main(int argc,char *argv[]) { // int function(8); // string function("hello world"); return 0; }
汎用型を用いて単一チェーンテーブルの削除・変更を実現
#include
using namespace std;
//  
template<class T>
class Node {
     
public:
	T data;
	Node<T>* next;
};
//    
template<class T>
class LinkList {
     
private:
	Node<T> *head = new Node<T>();
public:
	//    
	~LinkList() {
     
		delete head;
	}
	/*
	  
*/
	void add(int data) {
     
		Node<T>*temp = new Node<T>();
		temp->data = data;
		temp->next = head->next;
		head->next = temp;
	}
	/*
		  
	*/
	void toString() {
     
		//          ,          
		Node<T> *temp = head->next;
		while (temp != NULL) {
     
			//         ,        ->
			if (temp->next != NULL) {
     
				printf("%d->", temp->data);
			}
			else {
     
				printf("%d", temp->data);
			}
			temp = temp->next;
		}
	}
	/*
		      
	*/
	Node<T>*get(int index) {
     
		Node<T>*temp = head->next;
		for (int i = 0; i <= index; i++) {
     
			temp = temp->next;
		}
		return temp;
	}
	/*
		      
	*/
	void del(int index) {
     
		Node<T>*front, *rear;
		//         
		front = get(index);
		//    
		rear = front->next;
		front->next = front->next->next;
		delete rear;
	}
	/*
		      
	*/
	void replace(int index, int data) {
     
		Node<T>*temp = get(index);
		temp->data = data;
	}
};
/*
	  	          ,     。。。
*/
int main(int argc,char*argv[]) {
     
	LinkList<int>list;
	//  
	for(int i = 1; i < 10; i++)
	list.add(i);
	//  
	list.toString();	cout << endl;
	//  
	list.del(5); list.toString();   cout << endl;
	//  
	list.replace(2, 666); list.toString();
}