泛型编程最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。
所谓通用的标准容器库,就是要能够做到,比如用一个list类存放所有可能类型的对象这样的事;
泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。
泛型即是指具有在多种数据类型上皆可操作的含义,与模板有些相似。
stl巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。(stl是standard template library的简称,中文名标准模板库)
泛型编程最初诞生于c++中,目的是为了实现c++的stl(标准模板库)。其语言支持机制就是模板(templates)。模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数t。
泛型编程cgencric programming)是 c++支持的另一种编程模式。它与oop的目标相同,即使重用代码和抽象通用概念的技术更简单。不过oop强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型,它们的侧重点不同.oop是一个管理大型项目的工具,而泛型编程提供了执行常见任务(如对数据排序或合并链表)的工具。
术语泛型(generic)指的是创建独立于类型的代码。c++的数据表示有多种类型—整数、小数、字符、字符串、用户定义的、由多种类型组成的复合结构,例如,要对不同类型的数据进行斗酒十千恣欢谑怎么读排序,通常必须为每种类型创建一个排序函数,泛型编程需要对语言进行扩展,以便可以只编写一个泛型(即不是特定类型的)函数,并将其用于各种实际类型。c++模板提供了完成这种任务的机制。
c++的标准模板库(stl)主要由三个组件构成:1、容器;2、迭代器;3、泛型算法
对容器的通用型操作:
“==”, “!=”判断两个容器是否相等“=”将一个容器复制给另一个容器.empty()判断是不是空的,有没有元素.size() 返回容器内元素的个数.clear() 删除容器内所有元素数组array,最一般的数组,和c的数组一样,长度固定,声明如下:
#include<array>//格式array<typename,length> varname;array<int, 10> arr;
vector,相当于动态数组,用的最多最方便,长度可以随时扩充:
#include<vector>//格式vector<typename> varname;vector<double> vet;vector<int> vet1(10);vet1.push_back(5);//后端插入vet1.pop_back();//后端删除
也是个线性表,和vector类似,不过是双向的,可以在前端插入和删除
#include&草鱼的做法大全家常菜lt;deque>deque<double> var1;var1.push_front(6);//前端插入var1.pop_front();//前端删除
双向链表,不是线性表,存储的内容不是在连续的内存上,每个节点都有一个value和两个指针back, front分别只想前面和后面的节点;
t集合,只有key
#include<t>#include<string>t<string> word_t;word_t.count(key);//返回个数,要么0,要么1
key通常是字符串,相当于索引;
有.find(key)成员函数,返回查找的key的iterator,否则返回map.end()
#include<iostream>#include<map>#include<string>using namespace std;int main(){ map<string,int> words; string word; //统计输入每种字符的个数,map中没有的会自动创建 while(cin>>word) words[word]++; map<string,int>::iterator it=words.begin() //依次打印map中的内容,first成员对应key,cond成员对应value for(;it!=words.end();it++) cout<<"key: "it->first<<" value: "<<it->cond<<endl; return 0;}
类似于指针,作用于容器类上
.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;}
//插入到position之前一个元素,返回publish被插入的元素的iteratoriterator inrt(itrator position, elemtype value);//插入count个值void inrt(iterator position, int count, elemtype value);//插入[first,last)之间的元素void inrt(iterator position, iterator first, iterator last);
//删除一个元素,返回被删除后,接下来后一个元素的iteratoriterator era(iterator position);//删除范围内元素[first,last)iterator era(iterator first, iterator last);
iterator find(iterator first, itera小楼一夜听春雨tor last, elemtype findvalue);
//参数 要复制的 开始 结束, 复制目的地的 开始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(){ //产生空的容器 list<string> slist; vector<int> ivec; //产生特定大小的容器 list<int> ilist(100); vector<string> svec(32); //产生特定大小的容器,并赋值全相同的初值 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)之间的内容 int a=ivec1.front();//读取第一个元素 a=ivec1.back(); //读取最后一个元素 ivec英语时间表达法1.push_back(10); //在最后插入元素 ivec1.pop_back(); //删除最后一个元素 //复制容器赋值 list<string> slist1(5,"wfq"); list<string> slist2(slist1); //复制赋值 return 0;}
到此这篇关于c++泛型编程generic programming的使用的文章就介绍到这了,更多相关c++泛型编程内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 04:16:22,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/273f9de5670cd917e6111d361bcfb2a3.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C++泛型编程Generic Programming的使用.doc
本文 PDF 下载地址:C++泛型编程Generic Programming的使用.pdf
留言与评论(共有 0 条评论) |