第十六章模板与泛型编程

GGBeng GGBeng     2022-10-01     780

关键词:

16.1

知识点:当我们调用一个模板函数时,即向一个模板传递实参,编译器用此函数实参来推断模板实参,并将该模板实参(即实参的类型)绑定到模板参数(即T)。

实例化:编译器用模板实参代替对应的模板参数来创建出一个新“实例”。譬如用int代替T,创建出一个新函数实例。

 

16.2

template <typename T>
bool cmp(const T &a, const T &b)
{
	return a < b;
}

int main()
{
	cout << boolalpha << cmp(‘a‘, ‘b‘) << " " << cmp(3, 2) << endl;
	return 0; 
}

  

16.4

#include <iostream>
#include <vector>
#include <list>
 
using namespace std;

template <typename T, typename V>
bool find1(const T &beg, const T &end, const V &val)
{
	T it = beg;
	while (it != end) {
		if (*it == val)
			return true;
		++it;
	}
	return false;
}

int main()
{
	vector<int> vec{2, 1, 6, 4, 8, 7};
	list<string> lst{"pine", "cake", "fine", "kzw"};
	bool bl1 = find1(vec.begin(), vec.end(), 6);
	bool bl2 = find1(lst.begin(), lst.end(), "tiple");
	cout << boolalpha << bl1 << endl << bl2 << endl;;
	return 0; 
}

  

16.5

c++primer第十六章

//1.模板定义以关键字template开始,后跟一个模板参数列表,此列表不能为空。编译器用推断出的模板参数来实例化一个特定版本的函数。类型参数前必须使用class或者typename(推荐使用typename)。template<typenameT>boolcomp(Tt0,Tt1){return... 查看详情

模板与泛型编程1(函数模板)(代码片段)

定义、实例化函数模板:对于函数体完全相同,唯一差异就是参数类型的情况,我们可以定义一个通用的函数模板,而非为每个类型都定义一个新函数:1#include<iostream>2#include<vector>3usingnamespacestd;45template<typenameT>//模... 查看详情

《java编程思想》学习笔记——第十六章数组

    数组和其它种类的容器之间的区别有三方面:效率,类型和保存基本类型的能力。在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序列,这使得元素访问非常快... 查看详情

effectivec++笔记(10)—模板与泛型编程(代码片段)

条款46:需要类型转换时请为模板定义非成员函数考虑之前的例子,对于操作符重载:classRationalpublic:Rational():x(0)Rational(intx_):x(x_)Rational&operator*(constRational&rhs)x*=rhs.x;return*this;intx;;intmain( 查看详情

effectivec++笔记—模板与泛型编程(代码片段)

模板内容很丰富,分两次记录吧条款41:了解隐式接口和编译期多态对应了显示接口和运行期多态。下面一个例子说明:voidfunc(Widget&w)cout<<w.size()<<endl;func参数类型被声明为Widget,所以w必须支持Widget接... 查看详情

第十六章string类和标准模板库(1.string类智能指针)

你究竟是玩家还是角色!!!1、String类string实际上是模板具体化basic_base<char>的一个typedef。string类将string::npos定义为字符串的最大长度,npos变量是string类的静态成员。string类的构造函数如下:构造函数参数为string和char*类型... 查看详情

boolanstl与泛型编程第三周笔记

对于本周老师讲的内容,C++Primer上面有第十一章关联容器的习题可以做。有一些地方还是不懂,搞明白了再写上来。P422E11.4//P422E11.4#include<string>#include<map>#include<iostream>usingnamespacestd;//要在一个容器中删除元素,好的... 查看详情

模板与泛型编程(代码片段)

...图灵机:它可以被用来计算任何可计算的值。于是导出了模板元编程,创造出“在C++编译器内执行并于编译完成时停止执行”的程序。容器反倒只成为C++template上的一小部分。然而,尽管template的应用如此宽广,有一组核心... 查看详情

boolanstl与泛型编程第一周笔记

...都有,还是那句话,我再抄一遍没意义,所以我把C++Primer模板那一章的习题做了一些,这章的题除了涉及到模板,还整合了很多之前学习容器的时候的习题(往往是用模板实现类或者函数,其中有很多使用容器的练习) 查看详情

模板与泛型编程——定义模板(代码片段)

一、定义模板1、函数模板  模板定义以关键字template开始,后跟一个模板参数列表,这是一个逗号分隔的一个或多个模板参数的列表,用<>括起来。在模板定义中,模板参数列表不能为空。模板参数表示在类或函数定义中... 查看详情

c++标准容器库与泛型编程(代码片段)

...红黑树的区别分配器(allocator)STL设计模式OOP和GP模板特化malloc分配内存的一点东西容器listIterator遵循原则vectordeque红黑树容器set和multiset容器map和multimaphashtable(哈希表)迭代器的分类算法算法accumulate算法for_each算法replace、 查看详情

第十六章标准函数库

1.整数函数:函数分为三类:算术,随机数和字符串转换。返回值为整型值。 2.intrand(void);voidsrand(unsingnedintseed);两个函数一起会产生伪随机数。(rand返回一个范围在0和RAND_MAX(至少是32767)之间的随机数) srand((unsignedint)t... 查看详情

鸟哥的linux私房菜——第十六章:学习shellscripts

   视频链接: 1.什么是ShellScript         (shell写的脚本)1.1干嘛学习shellscripts?      ()1.2第一支script的撰写与执行1.3撰写shellscript的良好习惯建立  2.简单的shellscript练习:      (read-p ... 查看详情

[geekband]stl与泛型编程

本篇文章主要介绍泛型算法中的变易、排序、数值算法。一、变易算法所谓变易算法是指那些改变容器中的对象的操作。1.1copy组template <classInputIterator, classOutputIterator> OutputIteratorcopy(InputIteratorfirst... 查看详情

第十六章-进程和线程

对于操作系统来说,一个任务就是一个进程(Process)进程内的这些“子任务”称为线程(Thread)真正的并行执行多任务只能在多核CPU上实现多任务的实现有3种方式:  多进程模式;  多线程模式;  多进程+多线程模... 查看详情

模板与泛型编程——模板实参推断(代码片段)

一、模板实参推断  对于函数模板,编译器利用调用中的函数实参来确定其模板参数。从函数实参来确定模板实参的过程被称为模板实参推断。在模板实参推断过程中,编译器使用函数调用中的实参类型来寻找模板实参,用这... 查看详情

第十六章函数基础

#1.#A:python的def语句实际上是一个可执行语句,当他运行的时候,它创建一个新的函数对象并将其赋值给一个变量名#B:因为def语句是一个语句,所以一个def可以出现在任一语句可以出现的地方,比如说嵌套在其他的语句中#C:函数除... 查看详情

第十六章创建高级联结

学习目的:了解另外一些联结类型,包括它们的含义和使用方法,如何对被联结的表使用别名和聚集函数。 使用表别名:别名除了用于列名和计算字段外,SQL还允许给表名起别名。这样做主要有两个理由:缩短SQL语句允许在... 查看详情