当前位置:   article > 正文

C++双指针总结

c++双指针

双指针:主要用来遍历数组 若两指针指向相同数组且遍历方向相同且不相交,即为滑动窗口,若遍历方向相反则将数组覆盖,可用来进行搜索

指针与常量:

int x

int *p1=&x;       *p1为一个类型是int的指针,获取变量x的地址。指针可以被修改,值也可以被修改

const int *p2=&x;       const作用在int上而非指针p2上,因此指针可被修改而值不可修改

int * const p3=&x;        const作用在p3上则指针不可改变而值可被修改

const int * const p4=&x;     指针和值都不可被修改

指针函数与常量:

addition 是指针函数,即代码最终不是return 0,而是返回一个指针 

int* addition(int a, int b) {

int* sum = new int(a + b);//分配内存

return sum;  //函数最终返回的是指针sum

}

minus是函数指针,指向函数的指针

合并两个数组:

void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {

    int pos = m-- + n-- - 1;

    while (m >= 0 && n >= 0) {

    nums1[pos--] = nums1[m] > nums2[n]? nums1[m--]: nums2[n--];

    }

    while (n >= 0) {

    nums1[pos--] = nums2[n--];

    }

}

将两个长度分别为m和n的数组,将两数组合并到第一个数组中使第一个数组长度扩展到m+n,相对原来多出的n位用0填补,则不需要额外再开辟一个全新的空间来合并。

快慢指针:

给定一个链表,如果有环路,找出环路的起始点

输入一个链表,输出是一个链表节点,如果没有环路,返回一个空指针;如果有环路,给定两个指针,起始位置在链表开头,前进步数设为不同,若存在环路,肯定会有相遇问题,当第一次相遇时,将快指针重新移动到表头,并让两指针都前进一步,放第二次相遇时的节点即为环路的开始点

常用STL库

结构体:

定义:定义时可先定义结构体类型再单独进行变量定义;也可紧跟在结构体类型说明之后进行定义;也可在说明一个无名结构的同时直接进行定义;还可使用new动态创建结构体变量,但创建时必须是结构体指针类型,创建使用后要有delete

结构体初始化方法:

1.利用结构体自带的默认构造函数

2.利用带参数的构造函数

3.利用默认无参的构造函数

结构体嵌套:

struct Costs

{

    double wholesale;

    double retail;

};

 

struct Item

{

    string partNum;

    string description;

    Costs pricing;

}widget;

结构体Costs嵌套在结构体Item中

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/628813
推荐阅读
相关标签
  

闽ICP备14008679号