泛型編程stl
㈠ 泛型編程的簡介
泛型編程的代表作品STL是一種高效、泛型、可交互操作的軟體組件。STL以迭代器 (Iterators)和容器(Containers)為基礎,是一種泛型演算法(Generic Algorithms)庫,容器的存在使這些演算法有東西可以操作。STL包含各種泛型演算法(algorithms)、泛型迭代器(iterators)、泛型容器(containers)以及函數對象(function objects)。STL並非只是一些有用組件的集合,它是描述軟體組件抽象需求條件的一個正規而有條理的架構。
泛型的第一個好處是編譯時的嚴格類型檢查。這是集合框架最重要的特點。此外,泛型消除了絕大多數的類型轉換。如果沒有泛型,當你使用集合框架時,你不得不進行類型轉換。
關於泛型的理解可以總結下面的一句話,它是把數據類型作為一種參數傳遞進來。
泛型編程(Generic Programming)最初提出時的動機很簡單直接:發明一種語言機制,能夠幫助實現一個通用的標准容器庫。所謂通用的標准容器庫,就是要能夠做到,比如用一個List類存放所有可能類型的對象,這樣的事情;熟悉一些其它面向對象的語言的人應該知道,如Java裡面這是通過在List裡面存放Object引用來實現的。Java的單根繼承在這里起到了關鍵的作用。然而單根繼承對C++這樣的處在語言鏈底層的語言卻是不能承受之重。此外使用單根繼承來實現通用容器也會帶來效率和類型安全方面的問題,兩者都與C++的理念不相吻合。 泛型編程最初誕生於C++中,由Alexander Stepanov[2]和David Musser[3]創立。目的是為了實現C++的STL(標准模板庫)。其語言支持機制就是模板(Templates)。模板的精神其實很簡單:參數化類型。換句話說,把一個原本特定於某個類型的演算法或類當中的類型信息抽掉,抽出來做成模板參數T。比如qsort泛化之後就變成了:
template<class RandomAccessIterator, class Compare>
void sort(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
其中first,last這一對迭代器代表一個前閉後開區間,迭代器和前閉後開區間都是STL的核心概念。迭代器建模的是內建指針的介面(解引用、遞增、遞減等)、前閉後開區間是一個簡單的數學概念,表示從first(含first)到last(不含last)的區間內的所有元素。此外,comp是一個仿函數(functor)。仿函數也是STL的核心概念,仿函數是建模的內建函數的介面,一個仿函數可以是一個內建的函數,也可以是一個重載了operator()的類對象,只要是支持函數調用的語法形式就可成為一個仿函數。
通過操作符重載,C++允許了自定義類型具有跟內建類型同樣的使用介面;又通過模板這樣的參數化類型機制,C++允許了一個演算法或類定義,能夠利用這樣的介面一致性來對自身進行泛化。例如,一個原本操作內建指針的演算法,被泛化為操縱一切迭代器的演算法。一個原本使用內建函數指針的演算法,被泛化為能夠接受一切重載了函數調用操作符(operator())的類對象的演算法。
㈡ 請問學c++一定要學stl么到底有什麼用處如果要學的話推薦本書,謝啦
一定要學!!!
這是Bjarne Stroustrup(C++的實現者)說的。
1. 學c++一定要學c++的標准庫,STL是標准庫的最重要的組成部分。
2. STL是前輩的智慧結晶,也是泛型編程的重要實例,學泛型編程,肯定要從STL入手了。
3. STL已經滲入了c++的每一個角落,你不必刻意區分,也不必刻意學,任何一本c++教程肯定有STL,不然一定不是C++
4. STL可以讓你在更高的抽象層次上享受編程的樂趣,而不是像c那樣貼近底層。
推薦書籍:
1. 基礎:任意一本C++教程。(C++primer 4 ; Programming Principles and Practise Using C++)
2. 專攻:(其實沒有必要,知道大概,查手冊就行了,當然,如果你好好學泛型,可以看看源碼)
Effective STL。。。名字什麼的我記不住,搜一下STL pdf,一個世界的書都在那等你。
㈢ 求C++ 網路編程最好的書籍 謝謝了
學習編程基礎也很重要的,路要一步一步地走。不要老是想到看一本書就成為高手。我給你推薦一些書吧,你可以選一些看。其中很多都是經典之作。C++是以C為基礎的,所以你最好看一下C語言,網路方面,《計算機網路》和《TCP/IP詳解》是必看的。望採納。
1、演算法
計算機程序設計藝術-------Donald.E.Knuth----------演算法「倚天屠龍」雙劍
演算法導論-----------------Thomas H. Cormen--------演算法「倚天屠龍」雙劍
離散數學及其應用----------Kenneth H.Rosen
具體數學—計算機科學基礎--------Donald.E.Knuth
2、數據結構
數據結構 C++
數據結構演算法與應用
3、C語言
C程序設計語言(第2版·新版)---C語言「倚天屠龍雙劍」---Brian W.Kernighan「C語言之父」
C Primer Plus中文版(第五版)--------C語言「倚天屠龍雙劍」---Stephen Prata
C程序設計(第三版)---------------------------譚浩強
C語言大全(第四版)---------------------------HERBERT SCHILDT
C語言介面與實現:創建可重用軟體的技術-------------DAVID R.HANSON
C語言參考手冊(原書第5版)--------------------------Samuel P.Harbison
C程序設計教程---------------------------------H.M.Deitel/P.J.Deitel
C陷阱與缺陷-----------------------------------Andrew Koenig
5、C++
C++程序設計語言(特別版)---c++八大金剛----Bjarne Stroustrup「C++之父」
C++ Primer (第3版)中文版----c++八大金剛---Stanley B.Lippman
C++ Primer (第4版)中文版----c++八大金剛---Stanley B.Lippman
C++標准程序庫—自修教程與參考手冊--c++八大金剛--Nicolai M.Josuttis
C++語言的設計和演化-----c++八大金剛----Bjarne Stroustrup「C++之父」
深度探索C++對象模型---c++八大金剛----Stanley B.Lippman
Essential C++中文版---c++八大金剛---Stanley B.Lippman
Effective C++中文版 2nd Edition-----c++八大金剛------Scott Meyers
More Effective C++中文版----c++八大金剛------Scott Meyers
C++編程思想(第2版) 第1卷:標准C++導引--------Bruce Eckel
C++編程思想(第2版)第2卷:實用編程技術 --------Bruce Eckel
C++程序設計--------------------------譚浩強
C++ 程序設計教程(第2版)--------------錢能
C++ Primer Plus(第五版)中文版---Stephen Prata
6、操作系統
深入理解計算機系統(修訂版)-------RANDAL E.BRYANT
計算機操作系統(第六版)
7、編譯原理
跟我一起寫makefile
《編譯原理技術和工具》------- Alfred ------- 龍書
《現代編譯原理-C語言描述》 ----------- Andrew W. Appel ----------- 虎書
《高級編譯器設計與實現》 ----------- Steven S.Muchnick ----------- 鯨書
8、網路
計算機網路第四版中文版-----------Andrew S.Tanenbaum -------網路編程三劍客
TCP/IP詳解3卷本--------------------Richard Stevens----網路編程三劍客
UNIX網路編程2卷本--------------------Richard Stevens----網路編程三劍客
用TCP/IP進行網際互聯-----------Douglas E. Comer
高級TCP/IP編程-------------------Jon C. Snader
C++網路編程-----------------------Douglas Schmidt
UNIX環境高級編程(第2版)--------------------Richard Stevens
9、Linux
Linux內核設計與實現
Linux內核完全注釋
LINUX內核分析及編程
㈣ 鍏充簬C++娉涘瀷緙栫▼錛孲TL涓鎸堿SC鐮佹帓搴忥紒錛佹ユュ湪綰跨瓑
//#include "stdafx.h"//vc++6.0鍔犱笂榪欎竴琛.
#include <iostream>
using namespace std;
void main(void){
char a[100]="The quick brown fox jumps over a lazy dog",b[100];
cout << "Input a paragraph(<100chars)...\n";
cin >> a;
strcpy(b,a);
for(int ln=strlen(a),i=0;i<ln;i++){
for(int k=i,j=i+1;j<ln;j++)
if(b[k]>b[j]) k=j;
if(k!=i){
char ch=b[k];
b[k]=b[i];
b[i]=ch;
}
}
for(int j=0;b[j]==' ';j++);
for(i=0;i<ln;i++){
if(a[i]==' ') continue;
a[i]=b[j++];
}
cout << a << endl;
}