赞
踩
接触C++的第二周(这周的事情有点多,原本的计划暂时没有完成,会尽快补上)
目录
- int x;
- int *p1=&x;//指针可以被修改,值也可以被修改
- const int *p2=&x;//值不可修改
- int * const p3 =&x;//指针不可被修改
- const int * const p4 =&x;//皆不可修改
- // addition是指针函数,一个返回类型是指针的函数
- int* addition(int a, int b) {
- int* sum = new int(a + b);//分配内存
- return sum;
- }
- int subtraction(int a, int b) {
- return a - b;
- }
- int operation(int x, int y, int (*func)(int, int)) {
- return (*func)(x,y);
- }
- // minus是函数指针,指向函数的指针
- int (*minus)(int, int) = subtraction;
- int* m = addition(1, 2);
- int n = operation(3, *m, minus);
eg:输入两个数组及其长度m,n,第一个数组长度被扩展到m+n,多出的n位用0填补,要求将第二个数组归并到第一个数组上,不需要开辟额外空间
- 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--];
- }
- }
eg:给定一个链表,如果有环路,找出环路的起始点。
输入是一个链表,输出是链表的一个节点,如果没有环路,返回一个空指针
2为环路的开始点,采用下面的数据表示链表
- struct ListNode{
- int val;
- ListNode *next;
- ListNode(int x):val(x),next(nullptr){}
- };
给定两个指针,起始位置在链表开头,前进步数设为不同,若存在环路,肯定会有相遇问题,当他们第一次相遇时,将快指针重新移动到链表开头,并让快和慢每次都前进一步,当第二次相遇时,相遇节点即为环路的开始点
- ListNode *detectCycle(ListNode *head){
- ListNode *slow=head,*fast=head;
- //判断是否存在环路
- do{
- if(!fastt||!fast->next) return nullptr;
- fast=fast->next->next;
- slow=slow->next;
- }while(fast!=slow);
- //如果存在,查找环路节点
- fast=head;
- while(fast!=slow){
- slow=slow->next;
- fast=->fast->next;
- }
- return fast;
- }
- #include<set> // 头文件
- set<int>st; // 申请一个集合st
- st.begin(); // 返回set容器的第一个元素
- st.end(); // 返回set容器的最后一个元素
- st.clear(); // 删除set容器中的所有的元素
- st.empty(); // 判断set容器是否为空
- st.max_size(); // 返回set容器可能包含的元素最大个数
- st.size(); // 返回当前set容器中的元素个数
- st.insert(); // 在集合中插入元素
- st.erase(); // 删除集合中的某个元素
- #include<queue> // 头文件
- queue <int> q; // 申请队列
- q.push(value); // 入队
- q.pop(); // 出队
- q.top(); // 返回队首元素
- q.empty(); // 判断是否为空
- q.size(); // 返回队列个数
- #include<stack> // 头文件
- stack <int> stk; // 申请栈
- stk.push(value); // 入栈
- stk.pop(); // 出栈
- stk.top(); // 返回栈顶元素
- stk.empty(); // 判断是否为空栈
- #include<vector> // 头文件
- //常用命令
- vector<int>vec; // 申请一个vector容器,这里int也可以是其他数据类型
- vec.push_back(num); // 向容器最后插入一个数num
- vec.size(); // 查询目前容器的大小,常用于遍历
- //二维数组
- vector<int>vec[100]; // 申请100个不定长容器
- deque();//创建一个空双向队列
- deque( size_type size );// 创建一个大小为size的双向队列
- deque( size_type num, const TYPE &val ); //放置num个val的拷贝到队列中
- deque( const deque &from );// 从from创建一个内容一样的双向队列
- deque( input_iterator start, input_iterator end );
- // start 和 end - 创建一个队列,保存从start到end的元素。
- #include <map> // STL头文件没有扩展名.h
- begin()//返回指向 map 头部的迭代器
- clear()//删除所有元素
- count()//返回指定元素出现的次数
- empty()//如果 map 为空则返回 true
- end()//返回指向 map 末尾的迭代器
- equal_range()//返回特殊条目的迭代器对
- erase()//删除一个元素
- find()//查找一个元素
- get_allocator()//返回map的配置器
- insert()//插入元素
- key_comp()//返回比较元素key的函数
- lower_bound()//返回键值>=给定元素的第一个位置
- max_size()//返回可以容纳的最大元素个数
- rbegin()//返回一个指向map尾部的逆向迭代器
- rend()//返回一个指向map头部的逆向迭代器
- size()//返回map中元素的个数
- swap()//交换两个map
- upper_bound()返回键值>给定元素的第一个位置
- value_comp()//返回比较元素value的函数
1.先定义结构体类型再单独进行变量定义
- struct Student
- {
- int Code;
- char Name[20];
- char Sex;
- int Age;
- };
- struct Student Stu;
- struct Student StuArray[10];
- struct Student *pStru;
2.紧跟在结构体类型说明之后进行定义
- struct Student
- {
- int Code;
- char Name[20];
- char Sex;
- int Age;
- }Stu,StuArray[10],*pStu;
3.在说明一个无名结构体变量的同时直接进行定义
-
- typedef struct
- {
- int Code;
- char Name[20];
- char Sex;
- int Age;
- }student;
- Student Stu,Stu[10],*pStu;
4.使用new动态创建结构体变量
使用new动态创建结构体变量时,必须是结构体指针类型。访问时,普通结构体变量使用使用成员变量访问符"."
,指针类型的结构体变量使用的成员变量访问符为"->"
注意:动态创建结构体使用后有delete
- #include <iostream>
-
- using namespace std;
-
- struct Student
- {
- int Code;
- char Name[20];
- char Sex;
- int Age;
- }Stu,StuArray[10],*pStu;
-
- int main(){
-
- Student *s = new Student(); // 或者Student *s = new Student;
- s->Code = 1;
- cout<<s->Code;
-
- delete s;
- return 0;
- }
1.利用结构体自带的默认构造函数
2.利用带参数的构造函数
3.利用默认无参的构造函数
- struct node{
- int data;
- string str;
- char x;
- //注意构造函数最后这里没有分号哦!
- node() :x(), str(), data(){} //无参数的构造函数数组初始化时调用
- node(int a, string b, char c) :data(a), str(b), x(c){}//有参构造
- };
-
-
-
-
- //结构体数组声明和定义
- struct node{
- int data;
- string str;
- char x;
- //注意构造函数最后这里没有分号哦!
- node() :x(), str(), data(){} //无参数的构造函数数组初始化时调用
- node(int a, string b, char c) :data(a), str(b), x(c){}//初始化列表进行有参构造
- }N[10];
- struct Costs
- {
- double wholesale;
- double retail;
- };
-
- struct Item
- {
- string partNum;
- string description;
- Costs pricing;
- }widget;
可参考https://blog.csdn.net/xiaoqi44325234/article/details/85323787
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。