STL簡介

一、簡介

(1)STL 是 C++ 標準程序庫的核心。STL 內全部組件都由模板構成,其元素能夠是任意類別。ios

(2)STL譯爲標準模板庫。STL從根本上講是「容器」的集合,也是組件的集合。算法

容器包括:list、vector、set、map等,組件包括迭代器、算法等。編程

(3)STL的算法是標準算法,能夠把STL已經定義的算法應用在容器的對象上。數組

二、組成構件

STL 的組件中最主要的是容器、迭代器、算法和仿函數。數據結構

(1)容器:用來管理某類對象的集合函數

(2)迭代器:用來在一個對象羣集的元素上進行遍歷動做工具

(3)算法:用來處理羣集內的元素學習

三、基本結構

STL 是 C++ 通用庫,由容器、算法、迭代器、仿函數和內存配置器組成。spa

(1)容器

Vector<T>,是一種向量設計

List<T>,是一種雙向鏈表容器

Queue<T>,是一種隊列容器

Stack<T>,是一種棧容器

Deque<T>,是雙端隊列容器

Set<T>,是一種集合容器

Map<key,val>,是一種關聯數組容器

(2)算法

STL提供了很是多的數據結構算法。

這些算法在命名空間std的範圍內定義,經過包含頭文件<algorithm>來得到使用權。

STL中全部的算法都是基於模板實現的。

(3)迭代器

通俗的講,迭代器就是指示器,可以使程序反覆對數據進行訪問,爲訪問數據提供了通用的接口,相似於C++的指針。包括:

a、輸入迭代器:爲程序須要的數據源提供接口,只能從一個序列讀取數值,可修改可引用

b、輸出迭代器:只能向一個序列寫入數據,可修改,可引用

c、雙向迭代器:可讀可寫,可進行前項、後項操做

d、隨機接入迭代器:可經過跳躍的方式訪問任意數據,是功能最強大的迭代器

(4)仿函數

STL包含了大量仿函數。仿函數能夠理解爲函數的通常形式。仿函數有幾種不一樣的約束,對於編程來講,仿函數很是重要。

在標準C++規範中,函數調用通常使用指針,當須要調用函數時,只須要告訴函數的地址便可。

(5)內存配置器

STL包括了底層的內存分配和釋放。

STL提供3種容器配接器

a、Statck<Container>

b、Queue<Container>

c、Deque<Container>

示例代碼:

#這裏以stack爲例,運行環境:CFree(比VS輕量,運行速度快,學習算法推薦使用這個工具)
#include <iostream>
#include <stack> 
using namespace std;

int main(){
	//定義堆棧對象
	 stack<int> st;
	 for(int i=0;i<10;i++){
	 	//將數據壓入堆棧 
	 	st.push(i);	
	 }
	 while(!st.empty()){
	 	//若是st非空便可持續訪問其中的數據
		//彈出堆棧第一個元素並輸出
		cout<<st.top()<<" ";
		//彈出堆棧元素
		st.pop(); 	 
	 }
	 cout<<endl;
	 //任意鍵退出
	 cin.get(); 
}

運行結果:

四、特色

優勢:

(1)代碼易讀性強;

(2)STL集成了優秀的算法,熟悉使用能夠提升開發效率;精通STL後,能夠本身用模板去設計實現本身的算法和數據結構。

缺點:

(1)STL和其餘的類庫的接口不太方便;

例如在VCL和MFC中,都有本身的string類型,CString和AnsiString,其他接口若是使用字符串,確定是使用本身的原生類型,然而爲了設計可移植的程序,有可能將平臺獨立的部分用STL實現,這樣致使了在兩部分合做時存在大量的轉型動做,並且必須付出額外的轉型動做,例如std::string和CString/AnsiString沒有直接的轉型方法,所以必須經過char *做爲轉型的媒介。

(2)STL沒有提供object persistent.(?)

查語法錯誤不方便,因爲普遍使用模板,編譯器的提示信息老是千奇百怪,讓人摸不找頭腦。調試極不方便,Watch窗口的監視功能等於虛設.還要本身編寫代碼來查看容器內容.尤爲是跟蹤到STL內部以後,更讓人暈頭轉向。

五、編程概述

#以矢量Vector爲例
#include <iostream>
#include <vector> 
using namespace std;
//使用命名空間std

//定義矢量對象
vector<int> ratings(5);
int n; 

int main(){
	//輸入矢量的大小
	cin>>n;
	//定義矢量動態內存
	vector<double>scores(n); 
}
#include <iostream>
#include <vector> 
#include <string>
using namespace std;
//使用命名空間std
const int NUM=5;

//定義矢量對象
/*
vector<int> ratings(5);
int n; */

int main(){
/*
	//輸入矢量的大小
	cin>>n;
	//定義矢量動態內存
	vector<double>scores(n); */
	//定義矢量對象
	vector<string> names(NUM); 
	vector<int> sexs(NUM);
	
	cout<<"Please do exactly as told.you will enter\n"<<NUM<<"Personal name ,Their sex.\n";
	
	int i=0;
	//輸入信息
	for(i-0;i<NUM;i++){
		cout<<"enter title #"<<i+1<<":";
		//獲取輸入信息
		getline(cin,names[i]);
		cout<<"enter sex(0/1) #";
		cin>>sexs[i];
		//等待 
		cin.get(); 
	}
	cout<<"you enterd the following:\n"<<endl;
	//輸出信息
	for(i=0;i<NUM;i++){
		cout<<names[i]<<"\t"<<sexs[i]<<endl;
	}
	return 0;
}
#注意:這裏總結出STL編程基本思路:定義變量--輸入值--讀取值

運行結果:

相關文章
相關標籤/搜索