首页 > 其他分享 >[OI] 指针与迭代器

[OI] 指针与迭代器

时间:2024-06-07 11:55:06浏览次数:16  
标签:OI 迭代 int 地址 main hdk 变量 指针

取地址与解引用

一般来说,我们有一个取地址符 & 可以返回该变量的地址.

int main(){
	int a;
	cout<<&a;
}
0x6ffe1c

如果我们现在有一个地址,我们还可以对它进行解引用 *,来返回这个地址上的值.

int main(){
	int a=5;
	cout<<&a<<endl;
	cout<<*(&a);
}
0x6ffe1c
5

从这里可以看出,取地址与解引用是互为逆运算的.

指针变量即是存储地址的变量,它的类型取决于它指向的变量是什么.

显然,一个变量和它的指针变量间的转化,就是通过取地址与解引用这两个操作.

int main(){
	int a=5;
	int* p=&a;
	cout<<p<<endl;
	a=*p;
	cout<<a<<endl;
}
0x6ffe1c
5

小叙 对于指针变量的定义

指针变量定义时的 * 是跟着变量名的,也就是说,如果你使用

int* a,b,c;

你只会定义一个指针变量和两个整型变量.

此外,你可以通过给指针赋地址和给指针的解引用赋正常值两种办法来赋值.

int main(){
	int a=5;
	int *p1,*p2;
	*p1=a;
	p2=&a;
}

箭头取地址符

假设我们有这么一个结构体

int main(){
	struct hdk{
		int a,b;
	};
	hdk *p=;
}

那么我们想调用这个结构体里的变量,恐怕就要这么写了:

(*p).a=1;

因此,箭头符号应运而生

p->a=1;

我们还可以直接用指针变量直接存储值.

int main(){
	struct hdk{
		int a,b;
	};
	hdk *p;
	*p=hdk{1,2};
	cout<<p->a<<" "<<p->b;
}

数组指针与指针的运算

当一个指针被定义在数组中时,它就具有了运算的意义. 一般我们使用的有加法和减法,在指针中分别用来表示上一位和下一位.

int main(){
	int a[5]={1,2,3,4,5};
	int *p=a;
	for(int i=1;i<=5;++i){
		cout<<*p<<" ";
		p++;
	}
}
1 2 3 4 5

另外地,还有指针与指针的减法,可以用来获取两个指针间的距离.

int main(){
	int a[5]={1,2,3,4,5};
	int *p=a,*p0=a;
	for(int i=1;i<=5;++i){
		p++;
	}
	cout<<p-p0<<" "<<p0-p<<endl;
}
5 -5

迭代器

迭代器的本质也是指针,不过是stl的指针.

定义方法:STL类型 ::iterator

int main(){
	vector<int> a{1,2,3,4,5};
	vector<int>::iterator p;
	for(p=a.begin();p!=a.end();++p){
		cout<<*p<<" ";
	}
}
1 2 3 4 5

值得一提的是,.begin().end() 也是指针,一个是容器第一个数的地址,一个是最后一个数的下一个地址.

函数指针

假如几个函数参数相同,就可以通过函数指针替换.

以两个 (int,int) 函数为例.

int(*hdk)(int,int);
int test1(int a,int b){return a+b;}
int test2(int c,int d){return c*d;}

int main(){
	int x,y;
	cin>>x>>y;
	if(x>0){
		hdk=test1;
	}
	else{
		hdk=test2;
	}
	cout<<hdk(x,y);
}

指针批量申请与指针的删除

    struct a{
	    int x,y;
    };
    a* p=new a{1,2};
	delete p;
	int *e=new int[114];
	delete[] e;

标签:OI,迭代,int,地址,main,hdk,变量,指针
From: https://www.cnblogs.com/HaneDaCafe/p/18236974

相关文章

  • CSP历年复赛题-P3955 [NOIP2017 普及组] 图书管理员
    原题链接:https://www.luogu.com.cn/problem/P3955题意解读:给出n个图书编号,q个需求码,找到后缀与需求码匹配的最小图书编号,没有输出-1。解题思路:先对图书编号排序,用枚举法遍历每一个图书编号,看后缀是否与需求码相同。100分代码:#include<bits/stdc++.h>usingnamespacestd;c......
  • Android 13.0 hal层关于新增自定义hal模块功能实现
    1.前言在13.0的系统rom定制化开发中,在对hal模块进行开发时,需要通过添加自定义的hal模块来实现某些功能时,就需要添加hal模块的相关功能,接下来就来实现一个案例来供参考接下来就来具体实现这个功能2.hal层关于新增自定义hal模块功能实现的核心类hardware\interfaces\3.ha......
  • CSP历年复赛题-P2119 [NOIP2016 普及组] 魔法阵
    原题链接:https://www.luogu.com.cn/problem/P2119题意解读:在一组数里找出所有的Xa,Xb,Xc,Xd的组合,使得满足Xa<Xb<Xc<Xd,Xb-Xa=2(Xd-Xc),Xb-Xa<(Xc-Xb)/3,并统计出每个数作为A,B,C,D出现的次数。解题思路:1、枚举(O(n^4))首先想到的是通过4重循环枚举所有可能的Xa,Xb,Xc,Xd,然后判......
  • Pandas碎碎念1 - Dataframe 合并之 join,concat,merge,append
    最近做的几个项目都要经常使用pandas操作excel,中间也遇到了不少坑,简单记录一下吧。套用骁哥的一句话,让自己变得更强!Pandas中有几种常见的合并dataframe的方法,join,concat,merge,append。下面来尝试一下:首先来做一些测试数据data1={'Src':[1,2,3,4],'Mid'......
  • 【MySQL】LEFT JOIN 踩坑
     一、问题发现:主查询功能发现两条一样的记录,但是审批状态不一样,一个已通过,一个待审核 主表付款表:CREATETABLE`pur_or_payment`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'系统编码初始值为“1”',`pa_code`varchar(32)NOTNULLCOMMENT'付款编号',......
  • Android RecyclerView 获取当前滚动到的Item项
    背景:RecyclerView 左右滑动时,需要获取当前显示在页面上的选项卡步骤:1.RecyclerView  添加addOnScrollListener,回调中可以直接获取对应ItemIndexxxxRecyclerView.addOnScrollListener(newRecyclerView.OnScrollListener(){ @Override publicvoidonScrollStateChang......
  • Android Adapter中组件EditText文本变化监听 addTextChangedListener
    问题背景:使用适配器显示一个列表,列表中Item中有EditText,滚动时会有EditText组件内容消失步骤:1.在Adapter中,添加interfacepublicinterfaceOnEidtTextChangeListener{ voidxxxTextChanged(CharSequences,intstart,intbefore,intcount); voidgetXxxEditedCount(......
  • Android 水平滚动List 一项Item占满一页宽 设定单次滑动一次切换一次Item
    背景:水平滚动的List,一项Item占满页面宽度,相当于数量不定的选项卡,每个选项卡占满一页,左右滑动时,如何限制一次只能滑动一个Item步骤:1.水平滚动布局linearLayoutManager=newLinearLayoutManager(this);linearLayoutManager.setOrientation(LinearLayoutMana......
  • Android基础-Log管理
    在Android系统中,log管理机制扮演着至关重要的角色,它为开发者提供了跟踪、调试和优化应用程序的强大工具。以下将详细阐述Android中的log管理机制,包括其架构、日志类型、系统框架、使用方式以及管理策略等方面。一、AndroidLog管理机制概述Android的log管理机制是一个集中式......
  • Android基础-资源管理
    在深入探讨Android系统的资源管理机制时,我们首先需要理解Android作为一个开放源代码的移动操作系统,其资源管理机制的核心目的是确保应用程序能够高效、安全地访问和使用系统资源,从而为用户提供流畅、稳定的用户体验。以下是对Android系统资源管理机制的详细解析。一、资源分类......