函数模板学习记录

类中6个默认成员函数、运算符重载及函数模板 通过这次实验,熟练掌握类中六个默认成员函数及其作用,熟悉运算符重载,掌握函数模板。定义一个赋值运算符重载;还有,自己对有些知识的理解不够深刻,就会出些记错或者没记忆的情况,还是需要慢慢的去克服。二、写一个加法的模板函数Add,并按照隐式和显式两种方式对该函数模板进行实例化,体会函数模板的原理。3. 定义一个带有三个参数的构造函数,并在初始化列表的位置对年月日进行初始化;4. 定义一个拷贝构造函数,在初始化列表的位置对当前对象的年月日进行初始化;9. 写一个main函数,对以上日期类中定义的方法进行测试; 阅读详情

概念

  1. 函数模板,用于适配多种参数类型,可以避免重复的代码。

1.模板函数调用方式

template <typename T >
T Add(T t1, T t2)
{
    return  t1 + t2;
}

template <typename T1, typename T2 >
T1 Sub(T1 t1, T2 t2)
{
    return  t1 + t2;
}


int main()
{
    int a = 2;
    int b = 4;
    double a1 = 1.3;
    double a2 = 2.3;

	Add(a,b);  //① 调用函数模板;
	Add<>(a,b);  //与①效果一样,调用函数模板,此处<>无实际作用;
	Add(a, a1);  //此时编译器会报错,因为两个参数类型不一致;
	Add<double>(a, a1);  //此时<>生效,将执行的结果转为double类型
	
    Sub(a,a1);
    std::cout << Add<double>(a, a1) << std::endl;

    std::cout << Add<>(a, b) << std::endl;
    std::cin.get();
}

2.当普通函数和模板函数同时存在

void func()
{
    std::cout << "普通函数" << std::endl;
}

template <typename T>
void func()
{
    std::cout << "模板函数" << std::endl;
}

int main()
{
    int a = 2;
    int b = 4;
    double a1 = 1.3;
    double a2 = 2.3;

    func(); //调用的是普通函数,如果将上面普通函数注释掉编译器则则会报错
    func<int>(); //调用的是模板函数,需要显示的传入推导参数类型,否则会报错
    std::cin.get();
}

3.模板参数默认值

//默认参数类型
template <typename T1, typename T2 = int>
void funcT1(T1 a, T2 b = 123)
{
    std::cout << "a:"<<a << std::endl;
    std::cout << "b:" << b << std::endl;
}

template <typename T1 = int, typename T2>
void funcT2(T2 b)
{
    T1 a = b;
    std::cout << "b:" << b << std::endl;
    std::cout << "a:" << a << std::endl;
}

template <typename T1, int T2 = 123>
void funcT3(T1 a)
{
    std::cout << "a:" << a << std::endl;
    std::cout << "T2:" << T2 << std::endl;
}

int main()
{
    int a = 2;
    int b = 4;
    double a1 = 1.3;
    double a2 = 2.3;

    funcT1(a,a1); //参数2默认为整型

    funcT2(a1);  //将浮点型强转为整型
    funcT2<double>(a1); //参数1显示声明为浮点型,这样就无需类型转换了
 
    funcT3(5);
    funcT3<int,245>(5); //参数2必须为常量,在编译期间就能获取当前的值
    std::cin.get();
}

4.反编译指令

即将编译生成的a文件反编译为二进制文件binary.txt

  1. Linux环境命令
objdump -DC a.out>binary.txt
  1. Win环境命令
win dumpbin /all a.obj>binary.txt
《C++大学教程》学习笔记(六) 《C++大学教程》学习笔记(六) 1.数学库函数 包含在&lt; cmath &gt;头文件中的数学函数,整理一下: 函数 描述 ceil(x) 向上取整 floor(x) 向下取整 fabs(x) 取绝对值 log(x) lnX log10(x) lgX pow(x,y) x^y sqrt(... 阅读详情

相关推荐

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)...

qq_41046162的博客 5万+

c++学习记录 函数模板语法案例

【代码】c++学习记录 函数模板语法案例。

weixin_74361062的博客 148

Navicat Premium 12 永久激活保姆级教程(附最新补丁下载)

本文详细介绍了Navicat Premium 12的高效使用方法,从安装配置到高级功能应用,帮助用户充分发挥这款数据库管理工具的全部潜力。内容包括数据库连接管理、数据查询与编辑、数据同步与结构对比等核心功能,以及性能优化和最佳实践建议,提升数据库管理效率。

weixin_28834765的博客 640

c++学习记录 普通函数与函数模板的区别

普通函数与函数模板的区别。

weixin_74361062的博客 200

鱼眼双目测距实战:从OpenCV标定到SGBM匹配的完整流程解析

本文详细解析了鱼眼双目测距的完整流程,从OpenCV标定到SGBM匹配,涵盖标定、校正、匹配和测距四个关键阶段。通过实战经验分享,帮助开发者解决鱼眼镜头强畸变带来的测距挑战,提升测距精度至5%以内。特别适合机器人导航、自动驾驶和VR领域的开发者参考。

weixin_27298377的博客 123

Dify视觉模型节点避坑指南:我用Qwen2.5-VL做OCR识别时踩过的3个坑(及解决方案)

本文分享了使用Dify平台和Qwen2.5-VL视觉模型进行OCR票据识别时遇到的三个常见问题及解决方案,包括文件变量传递、结构化输出和条件分支判断失效。通过实战经验,帮助开发者优化多模态模型在财务自动化中的应用,提升OCR识别精度和效率。

weixin_29284885的博客 402

c++学习记录 普通函数与函数模板调用规则

普通函数与函数模板调用规则。

weixin_74361062的博客 162

COMSOL两相流(相场法)

COMSOL是一款功能非常强大的多物理场仿真软件,拥有可视化和后处理工具,可方便有效的展示您的仿真效果,具有灵活、高效、友好的特点,软件能够为用户提供各类工程问题的解决方案,从而帮助广大研究和工程人员能够在科研上取得新突破。 COMSOL可以实现声学、传热、流体力学、结构力学等方面的模拟仿真,具体模块如下图所示。 COMSOL软件设置流程 定义需要求解的问题类型:针对一个需要仿真的问题,需要先对问题进行分析;分析该问题用到哪些物理场,什么样的几何模型,以及如何设置研究等。该步骤可以使用COMSOL中的

weixin_47139559的博客 1万+

C++ template学习记录(函数模板)

C++ template学习记录(一)

Frank的专栏 1931

Qt Creator 下载和安装

在线安装程序是一个小型的安装程序,它将在您的计算机上下载和安装 Qt Creator。离线安装程序是一个较大的安装包,您可以将其保存在本地,并在没有网络连接的情况下安装 Qt Creator。在 Qt 官方网站上,您可以找到 Qt Creator 的下载页面。Qt Creator 是一款跨平台的集成开发环境(IDE),用于开发基于 Qt 框架的应用程序。在这一步中,您可以选择是否安装 Qt Creator 的附加组件。一旦您完成了组件的选择,安装程序将开始将 Qt Creator 安装到您的计算机上。

HackLogic的博客 6817

ICC2:mem出pin的Off Grid问题

这个命令本意是解决跨制成调用IP时在IP出pin位置加一定的routing blockage,限制绕线在一定范围内只能走直线出pin,用来解决off-grid问题也有很好的效果。在ICC2做先进工艺时会有off-grid的问题,off-grid可以理解为绕线没有在preferred方向track上。测试发现,2022版本以前的ICC2绕线容易有off-grid问题。主要在mem出pin的M2/M3层次上,切换版本绕线能很大程度上解决这个问题。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1630

硕彦博创学习记录——C++函数模板、重载、引用

C:面向过程 C++:面向对象。C++完全兼容C语言,新增对象的知识。 C语言的知识在C++中是完全适用的,这里就不多说那些原来的知识,主要说总结一下目前学习到的新知识。 1、C语言的头文件:  带.h    如:stdio.h       C++的头文件:不带.h     如:iostream     注:在C++文件中也可以调用C语言头文件包含的函数,所以说C++包容C。     ...

yangwenxiao123456的博客 247

Spring AI提示词模板应用

本文介绍了使用SpringAI提示词模板的配置方法,主要步骤包括:1)在JDK17和SpringBoot3.4.4环境下引入spring-ai-alibaba1.0.0.2依赖;2)配置application.yml文件;3)创建测试控制器类处理提示词模板(.st文件);4)通过模板变量动态生成AI回复内容。演示了如何通过@RequestParam设置默认参数,实现无需前端传参即可测试AI回复功能,最终完成了一个SpringAI提示词模板的应用Demo。

wjianwei666的专栏 196

记录wps js 宏学习过程中积累的一些函数模板

WPS js宏(目前只有表格宏),记录了一些学习过程中认为可能以后会用得着的基本函数模板

qq_51957196的博客 4197

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++函数模板特化与匹配学习笔记与参考

C++函数模板特化与匹配学习笔记与参考 /* * @Descripttion: 函数模板练习 * 模板的特化可以认为有偏特化和全特化,但函数模板不支持偏特化,编译器无法通过,取而代之的实现是利用函数模板重载 * 而对于函数模板的全特化,虽然其可以通过编译,但完全特化的函数模板可以被普通函数的重载版本所代替,因此最好使用普通函数 * 总结:函数模板的特化主要靠函数模板重载(取代偏特化)以及函数重载(取代全特化)这两种方式实现 * @version: 1.0.0 * @Date: 2020-11-1

weixin_45878768的博客 293

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++学习记录--b站黑马程序员视频——04 模板-函数模板案例-数组排序

用函数模板 实现对不同类型数组进行排序的函数。04 模板-函数模板案例-数组排序。

m0_59179752的博客 203

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C++ 函数模板创建

本文只是用于记录自己在学习中的错误和弱点。 习题16.52 题目要求使用函数模板count计算vector中某些值出现的次数。 1.类的声明 #pragma once #include "stdafx.h" #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;string&gt; using namespa...

iteye_5656的博客 212

HEIMA学习记录___模板

c++模板

m0_69335010的博客 208

C++学习记录(下)

解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制(这一种方式更加常用)问题:类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到。作用:建立一个通用类,类中的成员数据类型可以不具体制定,用一个。2.如果传入的是两个自定义数据类型,也无法直接进行比较。4.如果函数模板可以产生更好的匹配,优先调用函数模板。当子类继承的父类是一个类模板时,子类在声明的时候,要。1.比如传入的类型是两个数组,就无法直接进行赋值。利用函数模板封装一个排序的函数,可以对。

2401_88409077的博客 672

学习C++第41天

今天是第41天,复习类模板和函数模板

qq_26545507的博客 88

12.29--C++模板与泛型编程--《C++ Primer》学习

huangzheguyun的专栏 1121

c++学习笔记

前言 看到本博最近都在学习机器学习,怎么突然冒出一篇C++的笔记,有点突兀……这是因为最近在学怎么获取数据,然后喂给机器学习算法,现在想从原始网络流量包中获取kdd99格式,网上找了下,有个现成的源码是使用C++写的,所以就花了半天时间看了下C++。 也就是说主要目的是为了看懂一个C++原程序,所以和C++相关的知识点是不全的,后续如有时间会再补充更新。 参考书籍《C++Primer.Plu...

终身学习的程序猿 738

C++学习记录

结构体属于用户自定义数据类型,允许用户存储不同的数据类型struct 结构体名{结构体成员列表};//结构体名就是数据类型#include<string>//使用字符串必须包含此头文件int main(){ //方式1int age;int score;//创建变量时struct可以省略//方式2int age;int score;//方式3int age;int score;}s3;//通过.访问属性。

Yf18005429102的博客 1282

[原创]STL Iterator,traits学习笔记

学STL Iterator,traits笔记最近看侯捷老师的《STL源码剖析》有一点收获,特把我对STL iterator设计的认识草草记录下来,大部分内容来自那本书。欢迎大家跟我讨论,里面也有问题希望您能提供宝贵看法!一. Iterator认识如果需要构造一组通用容器,提供一套统一的算法,构造底层数据结构类库,iterator的设计无疑是非常重要的。iterator可以方便容器元素的遍历

li_yadan的专栏 2792

C++从零开始(day12)——模板初认识

class 类模板名//类内成员定义下面定义一个顺序表作为演示public:Vector(),_size(0){}~Vector();template //注意在类外面类函数时,需要加上模板参数列表if (_a)free(_a);要注意的是,这里的Vector不是具体的类,而是模具。

2301_80764270的博客 1260

嵌入式------春招准备(时间轴)

春招准备

m0_57504634的博客 608
上一篇: C++创建动态库的方法
下一篇: Ubuntu gcc编译报错找不到头文件
照书抄代码
博客等级 码龄8年 32粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值