[OI] 指针与迭代器
取地址与解引用
一般来说,我们有一个取地址符 &
可以返回该变量的地址.
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] 指针与迭代器的更多相关文章
- C++ 基础知识回顾(string基础、智能指针、迭代器、容器类)
[1] string基础 [1.1] string 的构造 #include <iostream> #include <string> int main() { using n ...
- C++面向对象编程之point-like classes的智能指针和迭代器、function-like classes即仿函数
1.智能指针 智能指针里面包含其他指针的形式和 委托 感觉比较像; 智能指针一定都需要重载 * 和 -> 操作符 ; 这个符号它作用后还能再继续作用下去; 2.迭代器: 这里主要关注 * 和 - ...
- 小猪猪C++笔记基础篇(四)数组、指针、vector、迭代器
小猪猪C++笔记基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始 ...
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...
- C++STL之迭代器
迭代器 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值.例如, ...
- C++ 迭代器介绍 [转摘]
转摘地址为:http://blog.chinaunix.net/uid-20773165-id-1847758.html 迭代器 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭 ...
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = # printf( ...
- STL六大组件之——迭代器这个东西
迭代器:除了在其它语言中司空见惯的下标法访问容器元素之外,C++语言提供了一种全新的方法——迭代器(iterator)来访问容器的元素.迭代器其实类似于引用,指向容器中某一元素.换个方式来说,容器就是 ...
- STL迭代器iterator
一:迭代器原理 迭代器是一个“可遍历STL容器内全部或部分元素”的对象. 迭代器指出容器中的一个特定位置. 迭代器就如同一个指针. 迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范 ...
- Iterator接口(迭代器)
目录 前言 原理 方法 异常 Iterator接口(迭代器) 前言 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象, ...
随机推荐
- bloom效果
搜索 复制
- 跟着ChatGPT学习设计模式 - 工厂模式
1. 前言 在工作过程中,越发觉得设计模式的重要性.经常会有人说工作5年的人,大学生随便培训1-2月也能做同样的工作,没错,大学生的确可以做. 但其写的代码,可维护性.可扩展性.添加新功能时方便还是简 ...
- top的wa,mpstat的%iowait以及pidstat的%wait
top的wa,mpstat的%iowait以及pidstat的%wait pidstat 中, %wait 表示进程等待 CPU 的时间百分比.等待 CPU 的进程已经在 CPU 的就绪队列中,处于运 ...
- web3 产品介绍 MyEtherWallet 方便和智能合约交互的钱包
MyEtherWallet(简称MEW)是一款流行的去中心化以太坊钱包,它允许用户在安全且简单的界面中管理自己的以太坊资产.在本文中,我们将介绍MyEtherWallet的主要特点.功能以及如何使用它 ...
- 【SpringBoot】13 数据访问P1 整合Jdbc
SpringBoot与数据访问概述: 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理, 添加大量自动配置,屏蔽了很多设置.引入各 ...
- 计算机论文中的SD SE是什么 ?
Standard Deviation (SD) and Standard Error (SE): 标准差和标准误差:在统计学和数据分析中常用来描述数据的分布和估计值的精确性.SD 表示标准差,SE 表 ...
- B站上教虚幻引擎做游戏的博主 —— 谌嘉诚
个人主页地址: https://space.bilibili.com/31898841/ 课程地址: https://www.bilibili.com/video/BV164411Y732/
- 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(5)
代码1:(求雅可比矩阵, jacobian矩阵求解) import theano from theano import tensor # Creating a vector x = tensor.dv ...
- 从markdown引擎实现的角度看markerdown到底是什么?
引用百度百科的解释: 链接:https://baike.baidu.com/item/markdown/3245829 Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Grub ...
- Linux系统配置 Samba客户端
参考: https://blog.csdn.net/m0_63624418/article/details/127856957 本文为局域网中linux和window共享文件方案--samba后续篇. ...