[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,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象, ...
随机推荐
- 第四节 JMeter基础-初级登录【固定用户登录】
声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 1.认识JMeter (1)测试计划:测试的起点,所有组件的容器.相当于一个测试项目,对测试计划展开一系列的操作. (2)线 ...
- Pandas库学习笔记(3)---Pandas Series
Pandas Series Pandas Series基本操作 pandas.Series Series结构如下: pandas.Series(data, index, dtype, copy) 构造 ...
- 使用 useRequestEvent Hook 访问请求事件
title: 使用 useRequestEvent Hook 访问请求事件 date: 2024/7/23 updated: 2024/7/23 author: cmdragon excerpt: 摘 ...
- freemarker+minio实现页面静态化
什么是页面静态化? 将原本动态生成的网页内容通过某种形式转化为html并存储在服务器上,当用户请求这些页面时就不需要执行逻辑运算和数据库读 优点: 性能:提高页面加载速度和响应速度,还可以减轻数据库. ...
- 青少年CTF擂台挑战赛 2024 #Round 1
青少年CTF擂台挑战赛 2024 #Round 1 crypto 1.解个方程 题目: 欢迎来到青少年CTF,领取你的题目,进行解答吧!这是一道数学题!! p = 474356125652182661 ...
- 【Kafka】03 Shell 操作
查看Kafka主题列表 $KAFKA_HOME/bin/kafka-topics.sh \ --zookeeper centos7-02:2181,centos7-03:2181,centos7-04 ...
- 使用Aspire优雅的进行全栈开发——WinUI使用Semantic Kernel调用智普清言LLM总结Asp.Net Core通过Playwright解析的网页内容
前言 这算是一篇学习记录博客了,主要是学习语义内核(Semantic Kernel)的实践,以及Aspire进行全栈开发的上手体验,我是采用Aspire同时启动API服务,Blazor前端服务以及Wi ...
- pytorch不像TensorFlow那样有专用的文件存储格式真的是不足吗?pytorch该如何处理大量小文件的读取呢?
偶然发现前文: [转载] PyTorch下训练数据小文件转大文件读写(附有各种存储格式对比) 在谈论pytorch的文件读取问题,因为以前是搞TensorFlow的,后来由于编写效率和生态环境问题转为 ...
- Deepin20系统开机报错——You are in emergency mode ... Cannot open access to console, the root account is locked. emergency mode/“journalctl -xb”
参考: https://knowledge.ipason.com/ipKnowledge/knowledgedetail.html/1286 https://blog.csdn.net/wenfei1 ...
- 如何在WSL2中安装可执行编译.cu文件的cuda环境
参考nvidia官方文档: https://docs.nvidia.com/cuda/wsl-user-guide/index.html#installing-insider-preview-buil ...