欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++泛型編程Generic?Programming的使用

 更新時間:2021年12月20日 15:42:49   作者:awhuter  
本文主要介紹了C++泛型編程Generic?Programming的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

泛型編程最初提出時的動機很簡單直接:發(fā)明一種語言機制,能夠幫助實現(xiàn)一個通用的標準容器庫。

所謂通用的標準容器庫,就是要能夠做到,比如用一個List類存放所有可能類型的對象這樣的事;

泛型編程讓你編寫完全一般化并可重復使用的算法,其效率與針對某特定數(shù)據(jù)類型而設計的算法相同。

泛型即是指具有在多種數(shù)據(jù)類型上皆可操作的含義,與模板有些相似。

STL巨大,而且可以擴充,它包含很多計算機基本算法和數(shù)據(jù)結(jié)構(gòu),而且將算法與數(shù)據(jù)結(jié)構(gòu)完全分離,其中算法是泛型的,不與任何特定數(shù)據(jù)結(jié)構(gòu)或?qū)ο箢愋拖翟谝黄?。(STL是Standard Template Library的簡稱,中文名標準模板庫)

泛型編程最初誕生于C++中,目的是為了實現(xiàn)C++的STL(標準模板庫)。其語言支持機制就是模板(Templates)。模板的精神其實很簡單:參數(shù)化類型。換句話說,把一個原本特定于某個類型的算法或類當中的類型信息抽掉,抽出來做成模板參數(shù)T。

泛型編程Cgencric programming)是 C++支持的另一種編程模式。它與OOP的目標相同,即使重用代碼和抽象通用概念的技術更簡單。不過OOP強調(diào)的是編程的數(shù)據(jù)方面,而泛型編程強調(diào)的是獨立于特定數(shù)據(jù)類型,它們的側(cè)重點不同.OOP是一個管理大型項目的工具,而泛型編程提供了執(zhí)行常見任務(如對數(shù)據(jù)排序或合并鏈表)的工具。

術語泛型(generic)指的是創(chuàng)建獨立于類型的代碼。C++的數(shù)據(jù)表示有多種類型—整數(shù)、小數(shù)、字符、字符串、用戶定義的、由多種類型組成的復合結(jié)構(gòu),例如,要對不同類型的數(shù)據(jù)進行排序,通常必須為每種類型創(chuàng)建一個排序函數(shù),泛型編程需要對語言進行擴展,以便可以只編寫一個泛型(即不是特定類型的)函數(shù),并將其用于各種實際類型。C++模板提供了完成這種任務的機制。
?C++的標準模板庫(STL)主要由三個組件構(gòu)成:1、容器;2、迭代器;3、泛型算法

一、容器

對容器的通用型操作:

  • "==", "!="判斷兩個容器是否相等
  • "="將一個容器復制給另一個容器
  • .empty()判斷是不是空的,有沒有元素
  • .size() 返回容器內(nèi)元素的個數(shù)
  • .clear() 刪除容器內(nèi)所有元素

array

數(shù)組array,最一般的數(shù)組,和C的數(shù)組一樣,長度固定,聲明如下:

#include<array>

//格式array<typename,length> Varname;
array<int, 10> arr;

vector

vector,相當于動態(tài)數(shù)組,用的最多最方便,長度可以隨時擴充:

#include<vector>
//格式vector<typename> Varname;
vector<double> Vet;
vector<int> Vet1(10);
Vet1.push_back(5);//后端插入
Vet1.pop_back();//后端刪除

deque

也是個線性表,和vector類似,不過是雙向的,可以在前端插入和刪除

#include<deque>
deque<double> Var1;
Var1.push_front(6);//前端插入
Var1.pop_front();//前端刪除

list

雙向鏈表,不是線性表,存儲的內(nèi)容不是在連續(xù)的內(nèi)存上,每個節(jié)點都有一個value和兩個指針back, front分別只想前面和后面的節(jié)點;

set集合,只有key

#include<set>
#include<string>
set<string> word_set;
word_set.count(key);//返回個數(shù),要么0,要么1

map 鍵值對key/value

key通常是字符串,相當于索引;
有.find(key)成員函數(shù),返回查找的key的iterator,否則返回map.end()

#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
 map<string,int> words;
 string word;
 //統(tǒng)計輸入每種字符的個數(shù),map中沒有的會自動創(chuàng)建
 while(cin>>word)
  words[word]++;
 map<string,int>::iterator it=words.begin()
 //依次打印map中的內(nèi)容,first成員對應key,second成員對應value
 for(;it!=words.end();it++)
  cout<<"key: "it->first<<" value: "<<it->second<<endl;
 return 0;
}

二、迭代器iterator(泛型指針)

類似于指針,作用于容器類上

.begin()
相當與頭指針,指向第一個元素的指針

.end()
指向最后一個元素的后面的指針

vector<int> Var{4,5,7,8};
vector<int>::iterator head=Var.begin();
vector<int>::iterator tail=Var.end();
for(;head!=tail;head++)  //遍歷容器類
{
 cout<<*head<<endl;
}

三、泛型算法Generic Programming

insert()插入

//插入到position之前一個元素,返回被插入的元素的iterator
iterator insert(itrator position, elemType value);

//插入count個值
void insert(iterator position, int count, elemType value);

//插入[first,last)之間的元素
void insert(iterator position, iterator first, iterator last);

erase()刪除

//刪除一個元素,返回被刪除后,接下來后一個元素的iterator
iterator erase(iterator position);

//刪除范圍內(nèi)元素[first,last)
iterator erase(iterator first, iterator last);

find()用于無序搜索,搜素范圍[first, last), 返回iterator, 找不到則返回last

iterator find(iterator first, iterator last, elemType findvalue);

copy() 復制

//參數(shù) 要復制的  開始  結(jié)束,   復制目的地的 開始
copy(iterator first, iterator last, iterator To_first);
vector<int> ivet;
vector<int> temp{1,2,3,4,5};
copy(temp.begin(), temp.end(), ivec.begin());
#include<vector>
#include<deque>
#include<list>
#include<string>
using namespace std;
int main()
{
 //產(chǎn)生空的容器
 list<string> slist;
 vector<int> ivec;

 //產(chǎn)生特定大小的容器
 list<int> ilist(100);
 vector<string> svec(32);

 //產(chǎn)生特定大小的容器,并賦值全相同的初值
 vector<int> ivec(10,1);  //10個1
 list<string> slist(16,"WoW");

 //通過兩個迭代器iterator賦值
 int arr[8]={1,1,2,2,3,5,6,4};
 vector<int> ivec1(ia,ia+8); //賦值[ia,ia+8)之間的內(nèi)容
 int a=ivec1.front();//讀取第一個元素
 a=ivec1.back(); //讀取最后一個元素
 ivec1.push_back(10); //在最后插入元素
 ivec1.pop_back(); //刪除最后一個元素

 //復制容器賦值
 list<string> slist1(5,"wfq");
 list<string> slist2(slist1);  //復制賦值
 return 0;
}

到此這篇關于C++泛型編程Generic Programming的使用的文章就介紹到這了,更多相關C++泛型編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于C#實現(xiàn)XML文件讀取工具類

    基于C#實現(xiàn)XML文件讀取工具類

    這篇文章主要介紹了基于C#實現(xiàn)XML文件讀取工具類,涉及C#針對XML文件各節(jié)點獲取的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#使用Aforge調(diào)用攝像頭拍照的方法

    C#使用Aforge調(diào)用攝像頭拍照的方法

    這篇文章主要為大家詳細介紹了C#使用Aforge調(diào)用攝像頭拍照的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • c# 并行的實現(xiàn)示例

    c# 并行的實現(xiàn)示例

    本文主要介紹了c# 并行的實現(xiàn)示例,我們使用?Parallel.ForEach?方法并結(jié)合?File.ReadAllLines?來提高讀取速度,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C#使用GUID(全局統(tǒng)一標識符)

    C#使用GUID(全局統(tǒng)一標識符)

    這篇文章介紹了C#使用GUID(全局統(tǒng)一標識符)的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Unity Shader實現(xiàn)描邊OutLine效果

    Unity Shader實現(xiàn)描邊OutLine效果

    這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)描邊OutLine效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • C#利用DesignSurface如何實現(xiàn)簡單的窗體設計器

    C#利用DesignSurface如何實現(xiàn)簡單的窗體設計器

    這篇文章主要介紹了C#利用DesignSurface如何實現(xiàn)簡單窗體設計器的相關資料,文中通過圖文及示例代碼介紹的很詳細,對大家具有一定的參考價值,需要的朋友們下面來一起學習學習吧。
    2017-02-02
  • 深入理解C#之接口

    深入理解C#之接口

    這篇文章主要介紹了C#接口(Interface)用法,較為詳細的分析了C#中接口的功能、實現(xiàn)及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • C#之CLR內(nèi)存深入分析

    C#之CLR內(nèi)存深入分析

    這篇文章主要介紹了C#之CLR內(nèi)存深入分析,對引用類型進行了深入討論,需要的朋友可以參考下
    2014-08-08
  • Unity中的PostProcessScene實用案例深入解析

    Unity中的PostProcessScene實用案例深入解析

    這篇文章主要為大家介紹了Unity中的PostProcessScene實用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • unity3d實現(xiàn)七天簽到功能

    unity3d實現(xiàn)七天簽到功能

    這篇文章主要為大家詳細介紹了unity3d實現(xiàn)七天簽到功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評論