C/C++_log2000_函数模板与类模板笔记1
来源:互联网 发布:易娱网络怎么样 编辑:程序博客网 时间:2024/04/27 22:02
函数模板与类模板的相关笔记 entry1
函数模板; 类模板;
函数模板定义:
template<class T> //模板前缀,通知编译器接下来的函数定应负或者函数声明是一个模板,class此处不是类,而是类型(type).T是类型参数,可被任意类型替代(如int,char,double.....)//因此,函数模板实际是针对不同类型的函数的一个大集合.Template <类型1 变量1 , 类型2 变量2, ….. > 返回类型 函数名(形参表){ 函数定义体;}编译器根据该函数实参数据类型,生成相应的重载函数,该重载函数称为模板函数,是一个实实在在的函数。
下面看几个例子
函数模板实例
大小比较系统
#include <iostream>#include <string>using namespace std;template <typename T>T max(T a, T b, T c){ if (b > a) { a = b; } if (c > a) { a = c; } return a;}void main(){ int i1, i2, i3; cin >> i1 >> i2 >> i3; int i = max(i1, i2, i3); cout << "i_max = " << i << endl; string g1, g2, g3; cin >> g1 >> g2 >> g3; string g = max(g1, g2, g3); cout << "g_max = " << g << endl;}
字符串转换系统
#include <iostream>#include <string>#include <sstream>using namespace std;template<typename T>T fromString(const string& s){ istringstream is(s); T t; is >> t; return t;}template<typename T>string toString(const T& t){ ostringstream os; os << t; return os.str();}void main(){ int i = 1234; cout << "i = " << toString(i) << endl; double x = 34.32; cout << "x = " << toString(x) << endl; i = fromString<int>(string("5678")); cout << "i = " << i << endl; x = fromString<double>(string("3.1415")); cout << "x = " << x << endl;}
矩阵运算
矩阵运算矩阵转置与矩阵相乘
#include <iostream>#include <iomanip>using namespace std;void inverse(int [3][6], int [6][3]);void multi(int[6][3], int [3][4], int [6][4]);void output(int [6][4]);int main(){ int middle[6][3], result[6][4]; int matrix1[3][6] = {8, 10, 12, 23, 1, 3, 5, 7, 9, 2, 4, 6, 34, 45, 56, 2, 4, 6}; int matrix2[3][4] = {3, 2, 1, 0, -1, -2, 9, 8, 7, 6, 5, 4}; inverse(matrix1, middle); multi(middle, matrix2, result); output(result); return 0;}void inverse(int matrix1[3][6], int middle[6][3]){ int i, j; for (i = 0; i < 3; i++){ for (j = 0; j < 6; j++){ middle[j][i] = matrix1[i][j]; } }}void multi(int middle[6][3], int matrix2[3][4], int result[6][4]){ int i, j, k; for (i = 0; i < 6; i++){ for (j = 0; j < 4; j++){ result[i][j] = 0; for (k = 0; k < 3; k++){ result[i][j] += middle[i][k]*matrix2[k][j]; } } }}void output(int result[6][4]){ int i, j; cout << "result" << "\n"; for (i = 0; i < 6; i++){ for (j = 0; j < 4; j++){ cout << setw(6) << result[i][j]; } cout << endl; }}-------------------------------运算结果:result 257 210 223 176 338 276 298 236 419 342 373 296 81 54 51 24 27 18 57 48 45 30 87 72-----------------------------------------
矩阵运算:矩阵转置与矩阵相乘函数模板。下标作为参数传递
#include <iostream>#include <iomanip>using namespace std;template<typename T1, typename T2>void inverse(T1* mat1, T2* mat2, int a, int b);template<typename T1, typename T2>void multi(T1* mat1, T2* mat2, T2* result, int a, int b, int c);template <typename T>void output(T* mat, char* s, int a, int b);int main(){ int middle[6][3], result[6][4]; int matrix1[3][6] = {8, 10, 12, 23, 1, 3, 5, 7, 9, 2, 4, 6, 34, 45, 56, 2, 4, 6}; int matrix2[3][4] = {3, 2, 1, 0, -1, -2, 9, 8, 7, 6, 5, 4}; char* s1 = "result"; char* s2 = "middle"; inverse(matrix1, middle, 6, 3); //显式: inverse<int[6], int[3]>(matrix1, middle, 6,3) multi(middle, matrix2, result, 6, 3, 4); //显式: multi<int[3], int[4]>(middle, matrix2, result, 6, 3,4); output(matrix1, "matrix1", 3, 6); output(middle, s2, 6, 3); output(matrix2, "matrix2", 3, 4); output(result, s1, 6, 4); return 0;}template<typename T1, typename T2>void inverse(T1* mat1, T2* mat2, int a, int b){ for (int i = 0; i < b; i++){ for (int j = 0; j < a; j++){ mat2[j][i] = mat1[i][j]; } }}template<typename T1, typename T2>void multi(T1* mat1, T2* mat2, T2* result, int a, int b, int c){ for (int i = 0; i < a; i++){ for (int j = 0; j < c; j++){ result[i][j] = 0; for (int k = 0; k < b; k++){ result[i][j] += mat1[i][k] * mat2[k][j]; } } }}template <typename T>void output(T* mat, char* s, int a, int b){ cout << s << endl; for (int i = 0; i < a; i++){ for (int j = 0; j < b; j++){ cout << setw(6) << mat[i][j]; } cout << endl; }}------------------------------------------运算结果:matrix1 8 10 12 23 1 3 5 7 9 2 4 6 34 45 56 2 4 6middle 8 5 34 10 7 45 12 9 56 23 2 2 1 4 4 3 6 6matrix2 3 2 1 0 -1 -2 9 8 7 6 5 4result 257 210 223 176 338 276 298 236 419 342 373 296 81 54 51 24 27 18 57 48 45 30 87 72
visitor tracker
阅读全文
0 0
- C/C++_log2000_函数模板与类模板笔记1
- C/C++_log2000_函数模板与类模板笔记2
- C/C++:函数模板与类模板
- [C/C++]模板函数与模板类
- C++---函数模板与类模板
- C/C++_log2000_函数声明与指针定义等零散知识点随手笔记
- C++,template,类模板和函数模板
- C++:函数模板、类模板及其特化
- C/C++学习笔记(2)--函数模板template<typename T>,类模板详解(1)
- 类模板与模板类(C++)
- C/C++_log2000_继承的练习1
- C/C++_log2000_空白窗口1
- 【c/c++】函数模板和模板函数
- c++:函数模板与函数包装器
- c++---函数和类模板
- C++(1)_函数模板
- C++primer 阅读笔记-模板与泛型编程(函数模板)
- C++Template学习笔记之函数模板
- [YTU]_2759( 字符串---统计元音)
- HDU
- 使用 Python Scrapy 爬取微博内容【二】
- C语言之堆栈学习笔记
- Java数据结构——链表
- C/C++_log2000_函数模板与类模板笔记1
- [YTU]_2760( 字符串---首字母变大写)
- activity生命周期
- 面向对象思想
- NEUOJ 73 Problem: Ready to declare
- hdu 1597
- 机器学习方法篇(1)------概览
- [YTU]_2803( 判断字符串是否为回文)
- C/C++_log2000_函数模板与类模板笔记2