[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,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象, ...
随机推荐
- Kafka kafka在windows下的安装与配置
kafka在windows下的安装与配置 By: 授客 QQ:1033553122 1.测试环境.............................................. ...
- Unity入门学习日记(一)
UGUI的初步使用 1. Canvas 使用UI的时候,所有的UI元素都作为Canvas的子节点存在于Canvas中,如果创建UI元素时没有Canvas作为父节点,会自动生成一个Canvas,是一位& ...
- 在Linux中清理Buff/cache
在 Linux 中,缓冲区和缓存是为提高系统性能而保留的,但如果这些缓存过多,可能会消耗大量内存,影响系统的性能.有时候,您可能需要手动清理这些缓存以释放内存.但请注意,通常不建议定期或频繁地这样做, ...
- 如何安装Ascend深度学习套件
1. 驱动安装 1.1 驱动测试 输入测试命令: npu-smi info 结果如下: 1.2 Ascend驱动未安装 请参考Ascend驱动的安装文档,进行安装对应显卡的驱动,文档链接如下:http ...
- 倒装句&强调句
倒装句 你[吃][胡萝卜]了吗? 吃胡萝卜了吗,[你]? 强调点不同 汉语常见于口语表达 英语则常见于书面用语 英语的语序是 主语 谓语(动词) 通常把谓语动词提前 1.完全倒装句 谓语部分完全放在主 ...
- 【Zookeeper】Re02 CuratorAPI
Curator,提供给Java操作ZK的API组件: 需要的组件依赖: <!-- https://mvnrepository.com/artifact/org.apache.curator/cu ...
- 【Web】实现页面自动刷新的功能
技术发现自: https://www.bilibili.com/video/BV14v411b7JS?p=8 摘要自CSDN帖子: https://blog.csdn.net/senbar/artic ...
- 【Shiro】05 自定义Realm认证实现
[前提情要] Shiro默认使用自带的IniRealm,IniRealm从ini配置文件中读取用户的信息, 大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm. 根接口:Realm ...
- python高性能计算:cython使用openmp并行 —— 报错:undefined symbol: omp_get_thread_num
test.pyx文件: from cython.parallel cimport parallel from openmp cimport omp_get_thread_num cpdef void ...
- 首次尝试SeaTunnel同步Doris至Hive?这些坑你不能不避
笔者使用SeaTunnel 2.3.2版本将Doris数据同步到Hive(cdh-6.3.2)首次运行时有如下报错,并附上报错的解决方案: java.lang.NoClassDefFoundError ...