汎用テンプレートと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++標準テンプレートライブラリでは,多様なデータ構造やアルゴリズムを操作できるテンプレートクラスや関数ライブラリであり,データの増加や圧縮が可能である.シーケンシャル・テーブル・データ構造と比較
きほんそうさ
List双方向チェーンテーブル
これはJava言語のLinkedListに似ていますが、下位は双方向チェーンテーブルデータ構造です.リストは、テーブルヘッダ要素に対する操作push_を提供します.front、pop_front、これはvectorが備えていない.vectorとは別の点で、listの反復器には失効はありません.vectorのようにバックアップスペースを保持するのではなく、容量額を超えたときにメモリを再割り当てし、反復器の失効を招きます.Listにはバックアップスペースの概念がなく、1つの要素に出入りすると1つの要素のスペースが申請されるので、反復器は失効しません.
きほんそうさ
Map
mapの内部には、データを自動的にソートする機能を持つ赤と黒のツリー(厳密ではないバランスのとれた二叉木)が建てられています.
きほんそうさ
汎用テンプレート
テンプレートは汎用プログラミングの基礎であり、汎用プログラミングは任意の特定のタイプとは独立した方法でコードを記述する.テンプレートは、汎用クラスまたは関数を作成する青写真または式です.反復器やアルゴリズムなどのライブラリは、汎用プログラミングの例であり、テンプレートの概念を使用しています.各コンテナには単一の定義があります.例えば、さっき言ったベクトルなど、vectorやvector
汎用型を用いて単一チェーンテーブルの削除・変更を実現
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
template <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();
}