正好碰到了C++的函数对象,查各路资料,总结写下来吧

C++通过匿名对象调用成员函数 C++ 通过匿名对象调用成员函数 刚开始写第一个 leetcode 程序就看到了之前没见到过的东西。首先,框架定义了一个Solution类,我们把方法写在成员函数twoSum(int,int)内,main()函数直接通过构造一个匿名的对象调用该成员函数。 vector<int> ret = Solution().twoSum(nums, target); 进一步总结,如果想要调... 阅读详情

       DTL中的BCA和BPA都是函数对象,如BCA的文档所说 A BCA is a function object (this can be a wrapped function pointer if you use cb_ptr_fun()) that is called to create an association between the columns in a SQL view  and the fields in a user defined data object that is used to represent individual rows from the view. Supported C++ types for binding to the fields in a database are shown in the BoundIO documentation.

        函数对象function object,实质上是一个实现了operator()--括号操作符--的类,BCA的一个代码如下:

class BCAExampleObj
{
public:
	void operator()(BoundIOs &cols, Example &rowbuf)
    	{
	   cols["INT_VALUE"] >> rowbuf.exampleInt;
	   cols["STRING_VALUE"] >> rowbuf.exampleStr;
	   cols["DOUBLE_VALUE"] >> rowbuf.exampleDouble;
	   cols["EXAMPLE_LONG"] >> rowbuf.exampleLong;
	   cols["EXAMPLE_DATE"] >> rowbuf.exampleDate;
	}
}
     感觉就是将一个函数功能写成了类,感觉可以看做重载()操作符(当然,这里面还重载了>>、<<、==三个操作符,重载果然厉害)

     关于为什么要引入函数对象,http://developer.51cto.com/art/201002/183522.htm 提出2个:一是,与函数指针相比,函数对象可以附带数据;二是函数对象可以封装类成员函数指针;函数对象之于函数指针的优势,也可以参考http://cpp.ezbty.org/content/science_doc/c%E6%A0%87%E5%87%86%E5%BA%93%EF%BC%9A%E5%87%BD%E6%95%B0%E5%AF%B9%E8%B1%A1,而 http://blog.youkuaiyun.com/roger_77/article/details/755613 则从函数指针的弱点提出,由于函数指针笨拙(其实已经很方便了)危险(这个倒是常提),所以函数对象的提出,很大部分,像是替代函数指针之用。关于STL中的函数对象,一个更详细的可以参考http://www.dutor.net/index.php/2010/04/stl-functor-function-object/ 另外http://feiqiang.iteye.com/blog/373914则是提出了不少经常用到的函数对象,像for_each(),实际上,以前看C++ STL范例大全也有如下示例

#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 
template <class T> 
class Print 
{ 
public:
	void operator () (T& t) 
	{ 
		cout << t << " "; 
	} 
}; 
int main () 
{
	vector<int> v(10); 
	Print<int> print; 
	fill(v.begin(),v.end(),5); 
	cout << "Vector v : "; 
	for_each(v.begin(),v.end(),print); 
	cout << endl; cout << "Size of v = " << v.size() << endl; 
	cout << "v.clear" << endl; 
	v.clear();
	return 0;
} 
    里面的Print不也是函数对象呢么?for_each()也是,for_each()什么的,不说书写方便了,估计性能也是很可观的,高级货啊。貌似侯捷翻译这个是仿函数?不得不说,这个更贴切啊,虽然Function Object直译也没什么,不过总不如仿字传神,大师就是大师啊。

       搜的过程顺便看到关于快速排序,stdlib.h的qsort()和algorithm的sort(),http://www.cnblogs.com/drizzlecrj/archive/2007/09/04/882120.html 提到的一个细节,是写compare函数的时候(这个目前见到的大多都是函数指针吧,虽然应该也可以用函数对象),需要注意溢出等异常情况(反正我是直接return a<b,问题不大)

       就这样吧,留之,有用

C++复习资料 访问权限修饰符:公有的(public)、私有的(private)和保护的(protected);公有部分:一些操作(即成员函数),是提供给用户的接口功能;私有部分:一些数据成员,通常用来描述该类中的对象的属性;只有成员函数或者经过特殊说明的函数才可以引用它们。//指针是没有办法直接引用的。 阅读详情

相关推荐

C++ 学习之函数对象

/ 定义一个加法函数对象Add adder;// 创建函数对象// 调用函数对象return 0;// 自定义升序排序函数对象// 使用函数对象进行升序排序// 输出排序结果return 0;// 自定义字符串长度比较仿函数// 创建字符串长度比较仿函数对象// 判断第一个字符串的长度是否小于第二个字符串的长度return 0;通过这些示例,您可以看到如何使用函数对象关系仿函数来进行对象之间的关系判断。您可以使用标准库提供的函数对象关系仿函数(如和。

百锦再的博客 2万+

【C++】什么是函数对象和函数对象的用处

class myprint { public: void operator()(int num) { cout << "num " << num << endl; count++; } int count = 0; }; void text2(int num) { cout << "num " << num << endl; } void te...

我的笔记本 9034

Vertx之Grpc消息发送

介绍 Vert.x gRPC 模块,它将 Google gRPC 的编程风格与 Vert.x 风格保持一致. gRPC 是一个高性能、开源、通用的RPC框架,是一种进程间通讯技术,由Google推出,基于HTTP2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。 在gRPC客户端可以直接调用不同服务器上的远程程序,使用姿势看起来就像调用本地程序一样,轻松的实现远端服务的连接、

Lance 1188

C++函数对象operator()

函数对象:定义了调用操作符()的类对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子: class A { public: int operator() ( int val ) { return val > 0 ? val : -val; } }; 类A中定义了操作符 ( ),A

summer 3万+

手把手实战:RK3588上YOLOv8模型从训练到部署全流程解析

本文详细解析了在RK3588开发板上部署YOLOv8目标检测模型的全流程。从模型训练、正确导出适配的ONNX格式,到使用RKNN-Toolkit2进行模型转换与量化,最后在板卡上完成部署与性能测试。文章提供了完整的代码示例和关键避坑指南,帮助开发者高效实现嵌入式AI应用落地。

weixin_28224217的博客 402

STDP实战:用PyTorch从零搭建脉冲神经网络(附完整代码)

本文提供了基于PyTorch从零搭建脉冲神经网络的实战教程,重点讲解了STDP学习规则的原理与工程实现。通过构建LIF神经元模型和向量化STDP层,并结合泊松编码,详细演示了如何构建一个能够进行无监督特征学习的混合网络架构,为探索神经形态计算和低功耗实时学习方案提供了完整代码与实践指南。

weixin_29056145的博客 263

C++ 函数对象 详解

用类创建出来的一个对象,调用起来语法结构像调用函数,我们把这种对象叫做函数对象。它通过重载函数调用操作符(operator())来实现可调用操作。可以将函数对象看作是一种可调用的“函数”,它可以封装一组函数调用所需要的状态和行为。函数对象可以像普通函数一样被调用,也可以像普通对象一样被拷贝、赋值、作为参数传递给其他函数等。函数对象广泛地应用于STL算法中,例如排序和查找等操作。函数对象可以使程序更加灵活和高效,因为它可以在运行时自定义函数的行为。

fckbb的博客 5301

threejs加载3dtiles(倾斜摄影)数据

1、安装3dTilesRenderer 插件 使用npm 安装 npm install 3d-tiles-renderer --save 或者去官网下载都行 GitHub - NASA-AMMOS/3DTilesRendererJS: Renderer for 3D Tiles in Javascript using three.js 2、使用 首先引入,在填入3dtiles数据的地址,可以是文件路径也可以是网站路径 const tilesRenderer = new TilesRend..

weixin_39481659的博客 1万+

【c++】cpp类和对象

c++中类和对象基本用法

hutaotaotao的博客 1268

5分钟搞定PaddleOCR PP-OCRv5环境搭建:从安装到第一个识别Demo

本文提供了一份详细的PaddleOCR PP-OCRv5环境搭建与快速入门指南。通过清晰的步骤,指导读者在5分钟内完成从创建Python虚拟环境、安装PaddlePaddle框架和PaddleOCR库,到编写并运行第一个OCR识别Demo的全过程,帮助开发者快速体验最新的PP-OCRv5模型的文字识别能力。

sprite的博客 1266

(功能安全六)硬件FMEDA计算

FMEDA(故障模式、影响与诊断分析)是功能安全验证的核心方法,通过量化分析硬件故障模式及其影响,计算SPFM、LFM、PMHF等关键指标。分析过程包含六大步骤:计算元器件失效率、识别故障模式、评估安全机制诊断覆盖率、分类计算各类失效率、量化指标计算及设计优化。输入需要系统架构图、硬件故障模式清单等资料,输出安全指标达标情况及改进建议,确保设计满足ASIL等级要求。该方法通过系统化的故障分类和量化评估,为硬件安全设计提供科学依据。

Dayongger的博客 1447

C++ 中的函数对象

在 C++ 中,函数对象(Function Object),也叫作 仿函数(Functor),是指任何可以像函数一样调用的对象。具体来说,函数对象是重载了 operator() 的类的实例,这样该对象就可以通过类似调用函数的方式来使用。特点:通过重载operator()函数对象的核心特征是它实现了 operator()。这样,类的实例就可以像普通函数那样被调用。状态可以被保存:函数对象与普通函数不同的是,它们可以拥有成员变量,因此可以在调用过程中保存和维护状态。

weixin_73931631的博客 2762

【学习系列】SAP RAP 22:Excel文件上传和读取(非扩展&扩展方式)

本文介绍了在RAP中实现Excel文件上传处理的三种方法:1) 使用@Semantics.largeObject注解实现简单上传下载,但限制在ObjectPage页面使用;2) 通过自定义action弹窗实现上传功能,但存在无法自动刷新列表等限制;3) 结合CustomUIExtension实现更灵活的完整功能,但需要UI5开发技能。文章详细说明了每种方法的实现步骤,包括数据库表设计、注解配置、前端界面开发和后端处理逻辑,并比较了各自的优缺点。最后通过一个处理不同币种数据的示例,展示了如何实现业务处理逻辑。

DeveloperMrMeng的博客 620

C++:函数对象(函数符)

C++:函数对象(函数符)1、什么是函数对象2、重载了()运算符的类对象 1、什么是函数对象 函数对象也叫函数符,函数符是可以以函数方式与()结合使用的任意对象。这包括函数名、指向函数的指针和重载了()运算符的类对象。 上面这句话的意思是指:函数名、指向函数的指针和重载了括号运算符的类对象与括号结合,从而以函数方式实现某种功能。 2、重载了()运算符的类对象 该示例摘自《C++ Primer》 第...

Mr.Andy的博客 8245

LAMMPS后处理—如何构建二维云图-接触角呢?

计算接触角

Rockyoung 6520

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Cpp】类和对象

类的认识,类和对象(一)

石墨博客 1174

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++STL函数对象详解

函数对象概念及使用计算机语言中的谓词内建函数对象算术仿函数关系仿函数逻辑仿函数 概念及使用 函数对象的概念: 重载函数调用操作符()的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,因此也叫仿函数 本质:函数对象(仿函数)是一个类,而不是一个函数 使用: 函数对象可以像普通函数那样调用,可以有参数和返回值 函数对象超出普通函数之处是,函数对象可以有自己的状态(就是对象的成员变量) 函数对象可以作为参数传递 下面我们从一个简单的例子里,了解函数对象的具体使用 #include&l

qq_52324409的博客 2329

深度学习工具包 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")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++函数对象

任何定义了函数调用操作符的对象都是函数对象。C++ 支持创建、操作新的函数对象,同时也提供了许多内置的函数对象。 C++ 针对常用的算术和逻辑运算定义了很多函数对象:

qq_40788199的博客 1037

c++函数指针和函数对象

C++ 函数指针和函数类型一、 导述二、c++成员函数在内存中的存储方式新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入...

IamCerian的博客 4867

【C++ 实现函数对象】

lambda、函数指针、仿函数

q_2474932226的博客 1488

【Cpp】类和对象#构造函数 析构函数

但是st1的类没有写析构函数,也只是调用默认生成的析构,这时,st1中的动态申请的堆空间就无法释放了,造成内存泄漏)默认生成虽然好,但是如果默认生成的构造/析构函数在调用时由于只处理自定义类型,如果自定义类型的构造/析构没有写,那么即使是默认生成的函数,本质上也是没有做任何工作。构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。

石墨博客 1436

函数对象二元函数.cpp

《C++STL基础及应用》 #include <iostream> #include<functional> #include<algorithm> #include<vector> #include<string> #include<iterator> using namespace std; //利用二元函数是学生成绩...

qq_32140289的博客 283

C++中如何定义函数对象

C++中如何定义函数对象 尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象。函数对象(也称“算符”)是重载了“()”操作符的普通类对象。因此从语法上讲,函数对象与普通的函数行为类似。 用函数对象代替函数指针有几个优点,首先,因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更富有弹性。函数对象也具备有存储先前调用结果的数据成员。在使用普通函...

Poo_Chai的博客 1706

C++:函数对象与函数指针

文章目录一、函数对象与函数指针二、使用实例 一、函数对象与函数指针 函数对象: 拥有()operator重载函数的对象即函数对象,函数对象类似C语言里面的函数指针,但在C++里为函数对象。 问题一:什么是函数对象呢? 例如:我们C语言进行函数调用与C++中两个函数调用。        看起来它们好像一模一样,但是C语言中的su...

Rain的博客 2073

C++ 函数对象

函数对象是一个可以通过operator()调用的类对象,它可以像普通的函数一样调用,但相比于普通函数具有更大的灵活性和功能性。函数对象可以保存状态。它们可以作为参数传递给其他函数。

无限大的博客 746
上一篇: 今天遇到的postgresql中的备份和恢复
下一篇: 今天试vi遇到的“Sorry,the command is not available in this version : syntax on”
coder_xia
博客等级 码龄17年 151粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值