省实集训总结 DAY1(离散化+双指针)

学习笔记|多组率卡方检验和Fisher确切法|个案加权|规范表达|《小白爱上SPSS》课程:SPSS第十六讲 | 多组率卡方检验和Fisher确切法 阅读详情

问题 D: subnum
【问题描述】
ROBIN喜欢只含有不同数的序列。现在给出含有N个正整数的一行序列,由于这N个数中可能有重复的数,ROBIN就不喜欢。但ROBIN可以删除前面一些数,或删除后面一些数,使保留下来的一段序列不再含有重复的数。ROBIN的任务是求出这个序列中最长的连续的没有重复数的子序列, 输出这个子序列的长度。
【输入格式】
第一行: 一个整数 N (0<=N<=100000)
第二行: 有N个正整数,每个正整数小与10^9。
【输出格式】
共一行, 一个整数,表示这个序列中最长的连续的没有重复数的子序列的长度。
【输入样例1】
1
45
【输出样例1】
1
【输入样例2】
8
2 3 4 3 5 7 7 3
【输出样例2】
4
【数据范围】
100%的数据 N 小于100000, 序列中的数小于10^9 。

这一题我首先想的是三重循环,一层枚举长度n~1,二层枚举起点,三层枚举检查。后来觉得枚举长度检查的话会超时(其实用这种方法不枚举长度也会),想了一下。如果用数组储存会爆(109),但其实一共只有105个数,emmm离散化打出来!!!而即使是用这种方法,那层循环还是免不了的,而想到了应该只是用O(n)的算法:双指针!!
正解。
先来一个离散化的普及:
(这位大大写的超级好,没有经过同意,万分抱歉,侵删)链接: 离散化:两种离散化方式详解.
在这里摘录全部 一部分(真的是一部分好吧) :

引入
离散化,就是把一些很离散的点给重新分配。
举个例子,如果一个坐标轴很长(>1e10),给你1e4个坐标,询问某一个点,坐标比它小的点有多少。
很容易就知道,对于1e4个点,我们不必把他们在坐标轴上的位置都表示出来,因为我们比较有多少比它小的话,只需要知道他们之间的相对大小就可以,而不是绝对大小,这,就需要离散化。
而离散化又分为两种,分为的两种是对于重复元素来划分的。第一种是重复元素离散化后的数字相同,第二种就是不同。

第一种
其实就是用一个辅助的数组把你要离散的所有数据存下来。
然后排序
去重,因为我们要保证相同的元素离散化后数字相同。

注意事项:
1.去重并不是把数组中的元素删去,而是重复的部分元素在数组末尾,去重之后数组的大小要减一
2.二分的时候,注意二分的区间范围,一定是离散化后的区间
3.如果需要多个数组同时离散化,那就把这些数组中的数都用数组存下来

第二种
第二种方式其实就是排序之后,枚举着放回原数组

原文链接:https://blog.youkuaiyun.com/weixin_43061009/article/details/82083983(再贴一遍)
emmm,因为老师讲的和dalao的代码不太一样,所以(我要贴我老湿的代码,闭嘴 )
先贴一下过程

过程大概就是这样子
(我也不知到为什么我要把第二种贴在前面 )

//这个是第二种#include<bits/stdc++.h>
using namespace std;
const int N= 1e5+5;
struct dt{
	int x, id;
}a[N];
bool cmp(dt a, dt b){
	if(a.x==b.x) return a.id< a.id;
	return a.x<b.x;
}
int c1[N],c2[N], H[N], n;
int main()
{
	cin>> n;
	for(int i=1; i<=n; ++i) {
		cin>> a[i].x;
		a[i].id=i;
	}
	sort(a+1, a+n+1, cmp);
	for(int i=1; i<=n; ++i){
		c1[a[i].id]= i;
	} 

再来一个第一种(为什么现在才贴 )

#include<bits/stdc++.h>
using namespace std;
const int N= 1e5+5;
struct dt{
	int x, id;
}a[N];
bool cmp(dt a, dt b){
	if(a.x==b.x) return a.id< a.id;
	return a.x<b.x;
}
int c1[N],c2[N], H[N], n;
int main()
{
	cin>> n;
	for(int i=1; i<=n; ++i) {
		cin>> a[i].x;
		a[i].id=i;
	}
	sort(a+1, a+n+1, cmp);
	int t=0;
	for(int i=1; i<=n; ++i){
		if(a[i].x!=a[i-1].x) t++;
		c2[a[i].id]= t;
	} 

keke就酱(这题我随便打了个伪哈希就过了 )
接下来是双指针(两个指针i,j 一起动)
一般思路好像是达到条件前指针就往前,达不到后指针就往前,直到达到条件为止
这题有个神仙方法(应该是算法)如下
先来一个图解
在这里插入图片描述

	int ans=1;
	int L=1,R=1;
	while(R<=n){
		if(H[c2[R]]>=L){
			ans=max(ans, R-L);
			L=H[c2[R]]+1;
			H[c2[R]]=R;
			R++;	
		} 
		else {
			H[c2[R]]=R;
			R++;
		}
	}
	ans=max(ans, R-L);
	cout<< ans;

现在来讲几个点
之前我一直都是写l<r的,但是老师说一定要写l<=r(一定要交叉(你说的都对 ))
然后就是匪夷所思的c2数组和H数组
c[i]表示第i个数组离散化之后变成了啥样
h[i]表示i上一次出现的地方在哪里
然后,一看这个代码觉得眉清目秀的有没有??!!(没有!! )
那我打一下注释

	int ans=1;//最大值
	int L=1,R=1;//左指针右指针
	while(R<=n){//循环条件
		if(H[c2[R]]>=L){//上一次出现数组中第R个元素c2[R]的位置在左指针的右方(就是不满足条件了)
			ans=max(ans, R-L);//更新最大值(不用-1,想一想)
			L=H[c2[R]]+1;//直接跳到上一次出现的地方的右端一个
			H[c2[R]]=R;//更新出现位置
			R++;	//右指针前进
		} 
		else {
			H[c2[R]]=R;//更新出现位置
			R++;//右指针前进
		}
	}
	ans=max(ans, R-L);//最后更新一次ans
	cout<< ans;//输出

嗯,舅酱
AC代码如下(这是标程)

#include<bits/stdc++.h>
using namespace std;
const int N= 1e5+5;
struct dt{
	int x, id;
}a[N];
bool cmp(dt a, dt b){
	if(a.x==b.x) return a.id< a.id;
	return a.x<b.x;
}
int c1[N],c2[N], H[N], n;
int main()
{
	cin>> n;
	for(int i=1; i<=n; ++i) {
		cin>> a[i].x;
		a[i].id=i;
	}
	sort(a+1, a+n+1, cmp);
	for(int i=1; i<=n; ++i){
		c1[a[i].id]= i;
	} 
	int t=0;
	for(int i=1; i<=n; ++i){
		if(a[i].x!=a[i-1].x) t++;
		c2[a[i].id]= t;
	} 
	int ans=1;
	int L=1,R=1;
	while(R<=n){
		if(H[c2[R]]>=L){
			ans=max(ans, R-L);
			L=H[c2[R]]+1;
			H[c2[R]]=R;
			R++;	
		} 
		else {
			H[c2[R]]=R;
			R++;
		}
	}
	ans=max(ans, R-L);
	cout<< ans;
	return 0;
}

今天就到这里,有时间我会把那个离散化的再补一下,反正这个题很有意思就对了。我绝对会及时完成。(真* )
在这里!!
过程大概就是这个样子

10、犹豫双模糊TOPSIS算法:原理与实例解析 本文介绍了犹豫双模糊TOPSIS算法的基本原理与应用步骤,结合中国四家纺织公司的案例,详细解析了从构建犹豫双模糊决策矩阵、归一化处理、专家信息聚合,到确定正负理想解、计算距离与相对贴近度系数的完整决策流程。该方法有效应对决策者在评价过程中的犹豫性,适用于财务评估、项目选择等复杂多属性决策场景,具有较强的实用性和推广价值。 阅读详情

相关推荐

手把手教你用Python 3.11和Node.js 18在Windows 11上搭建Dify开发环境

本文提供了一份详尽的Windows 11本地Dify开发环境搭建指南。文章手把手教你完成从Python 3.11、Node.js 18的安装配置,到PostgreSQL、Redis数据库服务的部署,再到前后端服务的启动与联调的全过程,并包含常见问题排查与效能优化建议,旨在帮助开发者构建一个稳定、可调试的Dify本地开发环境。

fire9的博客 645

整数去重(数组)

题目描述 给定含有 n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。 输入格式 输入包含两行: 第一行包含一个正整数 n(1≤n≤20000),表示第二行序列中数字的个数; 第二行包含 nn 个整数,整数之间以一个空格分开。每个整数大于等于 10 、小于等于 100。 输出格式 输出只有一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。 解法一 将输入的数(t)作为一个初始化后的数组的下标(a[

m0_62101546的博客 8318

使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序

上一篇文章中,我们简要介绍了ROS中action的基本知识,为了控制真实机械臂,我们已经修改了moveit配置文件,使得moveti启动后具备一个control_msgs::FollowJointTrajectoryAction类型的action客户端,接下来,我们完成该类型action的另一半,编写C++程序来实现action的服务端。由于底层机器人控制程序一般差别都很大,这里展示的只是编程要点...

爱学习的草莓熊 1万+

一些noip模拟题一句话题解

Problem A: 序列 Time Limit: 10 SecMemory Limit: 256 MBSubmit: 12Solved: 9[Submit][Status][Web Board] Description 作为一名火星人,你为了占领地球,需要想方设法使地球人失去信心。现在你获得了一项能 力,控制今后n天的天气温度,对于第i天,你能将温度控制在[ai,bi]中任意一...

weixin_30872733的博客 4439

Skiplist,B,B+tree,LSM tree

SkipList 理解(如何实现): 即使是有序的链表,查找的时间复杂度也是O(n),但链表不能随机访问所以不适用于二分查找,使得查找的时间复杂度为O(logn)。 于是将有序链表和二分查找结合得到了SkipList,类似于二叉搜索树,这是一种以空间换时间的算法,通过在每个节点中增加向前的指针,从而提升查找效率(如下图所示)。 一开始如a所示,是一个有序的链表,时间复杂度O(n)。随后建立了e所示的SkipList,从最顶层往下查找,可以跳过许多元素,减少查找次数。 ​

weixin_45875458的博客 947

Word公式一键转MathType保姆级教程(附omml2mml.xsl报错终极解决方案)

本文提供Word公式一键转MathType的保姆级教程,重点解决常见的omml2mml.xsl报错问题。通过详细分析报错原因、官方解决方案实操步骤及转换后格式优化技巧,帮助用户高效完成公式转换,适用于科研论文和商业文档编辑。

weixin_30082367的博客 555

算法学习(四)双指针算法/位运算/离散化/区间合并

1、双指针算法 案例: #include<iostream> using namespace std; int main() { char str[1000]; gets_s(str); int n = strlen(str); for (int i = 0; i < n; i++) { int j = i; while (j < n && str[j] != ' ') j++; for (int k = i; k < j; k++)

weixin_44001521的博客 450

高通camera调试经验总结

修改AF对焦模式 adb shell setprop vendor.debug.camera.af.manual 2 //使能手动对焦 adb shell setprop vendor.debug.camera.af.manual 0 //使能自动对焦

weixin_43381364的博客 1万+

golang 的指针和非指针方法的见解

值类型的变量和指针类型的变量先声明一个结构体:type T struct { Name string }func (t T) M1() { t.Name = "name1" }func (t *T) M2() { t.Name = "name2" }M1() 的接收者是值类型 T, M2() 的接收者是值类型 *T , 两个方法内都是改变Name值。下面声明一个 T 类型的变

纵横四海的博客 5035

华为OD新系统机试真题 2026.5.10 - 美观的灯笼

华为OD新系统机试真题【美观的灯笼】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【美观的灯笼】

qq_45776114的博客 640

Autosar模式管理入门系列02-EcuM

对EcuM状态机切换过程及模块中重要API进行介绍。

initiallizer的博客 7093

校赛选拔之 离散化+ 双指针+思维

https://scut.online/problem.php?id=101 题目描述 小P在课堂上课,老师留给他一个简单的问题: 有 nn 条木棍,第 ii 条木棍的长度是 a_ia​i​​。总共有 qq 次询问,每次询问给定 ll 和 rr ,问从[l, r][l,r] 这个区间里的木棍中,能不能选出 44 根木棍组成一个长方形. 现在快要下课了,小P想尽快解决这个

now_ing的博客 336

Spring Boot入门(03): 从零开始学习配置文件:掌握YAML和Properties,轻松应对多环境配置管理

在Spring Boot开发中,配置文件是非常重要的。本文将带领你从零开始学习配置文件,掌握YAML和Properties的语法,轻松应对多环境配置管理。无论是开发、测试还是生产环境,你都可以轻松切换不同的配置文件,并且能够灵活修改配置信息。

**My Coding Family** 4万+

双指针 离散化 区间融合 模板

双指针 for (int i = 0, j = 0; i < n; i ++ ) { while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑 } 常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作 ...

zpf1998的博客 176

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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【集训Day3 离散化】矩形覆盖

矩形覆盖(planting) 【问题描述】 给定在一个平面坐标系上的N(1 <= N <= 100)个矩形区域,这N个矩形可能有相互覆盖的部分。求平面上被所有矩形覆盖的总面积,重复部分只算一次。 【输入格式】planting.in 第一行一个整数N。 接下来N行,每行包含4个整数x1 y1 x2 y2,表示一个矩形区域。矩形的左上角为(x1,y1),右下角为(x2,y2)。坐标范围为–10

WSR的安全屋 540

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

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

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 240

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 391

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 338

跟我学c++中级篇—类型定义的方式

本文系统阐述了编程中类型定义的重要性及c++中的实现方式。重点对比了宏定义、typedef与modern using三种机制,指出using在可读性、灵活性和模板支持上的优势,推荐优先使用。同时提醒开发者注意别名滥用、类型歧义、错误信息冗长等问题,强调统一规范与合理设计。最终结论:在现代c++开发中,应以using为主,兼顾简洁性与可维护性,避免陷入命名混乱与编译困境。

fpcc的专栏 70

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 347

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 304

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 437

#SQLite 数据库笔记一:(概念 / 终端指令 / SQL 语句 / C 编程 / 回调函数)

数据库 = 数据的仓库,假设数据是海量。能力说明存储数据持久化保存,程序退出数据还在统计数据、分组、排序数据管理增、删、改、查(CRUD)嵌入式设备上也会用数据库(单片机网关、路由器、工业 HMI 都常见),因为 sqlite 体积小、无需服务进程、单文件即可。数据库 = 库 > 表 > 记录(行) > 字段(列)sqlite3 = 开源、C 写的、单文件、免安装、最多 2T 的嵌入式关系型数据库。

lwq20051110的博客 211

C 语言 malloc() 详解与实战 Demo

本文详解C语言malloc()函数,涵盖其语法、内存原理及实战应用。通过动态整数、数组、结构体与链表的Demo,演示如何安全申请、使用与释放内存,强调避免内存泄漏与空指针检查的重要性,帮助开发者掌握动态内存管理核心技能。

tangPHP的博客 371

【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针

C++类与对象知识(面向过程和面向对象的初步认识,类的初步认识,类的访问限定符及封装,类的作用域、实例化,类的对象模型,this指针)

2601_96587588的博客 884

【C++ 基础入门】C++继承(下):问题、底层原理与组合

C++继承(菱形继承的问题、虚继承原理、继承与组合、构造顺序)

2601_96587588的博客 773

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 135
下一篇: 省实集训总结 DAY1(深搜+DP+宽搜)
C_plus_
博客等级 码龄7年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值