C++
C++温故知新
壹米吾七
这个作者很懒,什么都没留下…
展开
-
int main(int argc, char* argv[]) 或者 int main(int argc, char** argv)
C++的main函数可以有输入参数,也可以没有若添加输入参数的话,参数名不固定,但类型是固定的,第一个是int,第二个是char**;第一个int表示输入后面可变参数的个数,在执行程序时由系统自动输入,参数个数至少有一个(程序名xxx.exe)第二个char**就是具体main的输入参数,输入的参数都是字符串类型int main(int argc, char* argv[]){ cout << "argc: " << argc << endl; for (i原创 2022-01-13 11:26:48 · 288 阅读 · 0 评论 -
char *p;sizeof(p)=?
sizeof(指针)是指针变量占用内存的大小(字节数),而指针是存储变量地址的,变量地址的长度即为指针变量所占内存大小,尽管不同类型变量所占内存大小不同(int四字节、char一字节),但指针存的只是首字节地址,不同的是指针递增时,增加的地址。所以在32位机上,所有指针类型变量占用内存字节数都为4因为32位机就是 4字节 * 8个二进制位/字节 计算出来的.如果在64位机上,指针占用内存大小...原创 2020-03-03 16:46:08 · 5459 阅读 · 0 评论 -
char* p; sizeof(p)
sizeof定义sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。int main(){ char* p1 = nullptr; int* p2 = nullptr; double* p3 = nullptr; long* p4 = nullptr; cout << "p1:" << sizeof(p1) << " *p1:" << sizeof(*p1) <<原创 2022-01-12 14:50:26 · 2054 阅读 · 0 评论 -
抽奖系统的实现(两种)
有多个奖项,每个奖项有对应的中将比重奖项比重特等奖10一等奖50二等奖200三等奖1000方法一:统计所有奖项的总权重(一般在初始化时统计一次即可),开奖时随机一个[0~总权重)的值作为开奖权重,循环奖项列表,开奖减去对应奖项的权重,当开奖权重小于等于零时,即对应奖项为中奖奖项。int totalWeight = sum(奖项权重);int rewardWeight = rand()%totalWeight;while(rewardWeight原创 2021-08-30 11:32:56 · 984 阅读 · 0 评论 -
Unix时间戳相关总结(整点时间戳,C++time函数)
切记切记,中国时区是东八区,比零时区快8小时。时间戳在线转换工具:http://tool.chinaz.com/Tools/unixtime.aspxC++time函数相关知识参考地址:https://www.runoob.com/w3cnote/c-time-func-summary.html获取整点时间戳(unix)int GetZeroTs(int ts){ int eightHoursTs = 28800; int oneDayTs = 86400; return (ts+eight原创 2021-08-20 15:08:18 · 420 阅读 · 0 评论 -
输入日期是星期几
1、基姆拉尔森计算公式W=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400) mod 7;void dayOfTheWeek(int year,int month,int day){ string week[7]={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"}; int W=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400) % 7;原创 2020-07-28 10:31:45 · 182 阅读 · 0 评论 -
输入两个年月日,返回日期之间的相差天数
分三种情况:1、同年同月,相差为日数2、同年,不同月,相差为月数+日数3、都不同,相差年数+月数+日数 ==(间隔的年(每个365/366)+小的日期到小日期年末+大日期年初到大日期)#include <iostream>using namespace std;struct Data{ int year; int month; int day;};//判断是否为润年bool isLeapYear(int year){ if(year<0) return fals原创 2020-07-27 18:11:25 · 1316 阅读 · 0 评论 -
输入年月日返回是当年的第几天
不同月份有不同的天数,需要区别对待。一三五七八十腊,三十一天永不差;四六九冬三十整;二,平年二十八,润年二十九;bool isLeapYear(int year){ if(year<0) return false; if(year%4==0&&year%100!=0||year%400==0) return true; else return false;}int getDays(int year,int month,int day){ if(year<0|原创 2020-07-27 16:38:01 · 318 阅读 · 0 评论 -
判断输入年份是否是润年
何为润年润年:1、年份是4的倍数且不是100的倍数2、年份是400的倍数bool isLeapYear(int year){ if(year<0) return false; if(year%4==0&&year%100!=0||year%400==0) return true; else return false;}原创 2020-07-27 16:25:38 · 241 阅读 · 0 评论 -
随便什么鬼的抽奖系统,效率低下,别用,就随便搞搞
#include <iostream>#include <string>#include <time.h>using namespace std;class MyClass{public: string type; //奖品名 int count; //奖品数量};int main(){ MyClass num[]={{"A",1},{"B",10},{"C",20},{"D",30},{"E",40},{"E",50},{"G",60},{"H"原创 2020-06-22 17:03:14 · 137 阅读 · 0 评论 -
两道题
1、按顺序输出所有字符,不重复,输入字符串"abccdddeffghi",输出"abcdefghi"void fun(string str){ int n=str.length(); int a[26]={0}; string ans=""; for(int i=0;i<n;i++){ if(a[str[i]-'a']==0){//没遍历过 ans+=str[i]; } a[str[i]-'a']+=1;//记录遍历过的字母 } cout<<ans<&原创 2020-06-16 12:33:09 · 138 阅读 · 0 评论 -
C++多态、关键字 virtual、纯虚函数
多态的目的是为了方便接口重写实现一个接口,多种方法class A{public: //定义虚函数,这里关键字 virtual很重要,影响后面子类重写方法能否成功 virtual void fun1(){ 某某操作; }}class B:public A{public: //重写父类方法 void fun1(){ B操作 }}class C:public A{p...原创 2020-02-26 22:34:40 · 561 阅读 · 1 评论 -
求整数转为二进制数后,二进制中1的个数
int getCount_1(int num){ int count=0; while(num>0){ if(num&1==1){ count++; } num>>=1; } return count;}int getCount_2(int num){ int count=0; while (num>0) { if(num%2==1){ count++; } num/=2; } return count;}in原创 2020-06-05 15:33:26 · 214 阅读 · 0 评论 -
不同类型指针之间的区别
int* p;char* p;intcharsizeof ( p )==4字节(32位)sizeof ( p )==4字节sozeof(*p)==4字节sizeof(*p)==1字节int num=10;int* p;p=#int* q=#p、q是地址*p、*q是指针指向的变量的值sizeof(指针)求的是地址长度,地址长度与炒作系统相关。sizeof(指针变量)求的是指针指向变量的数据类型的长度。...原创 2020-06-03 10:52:25 · 677 阅读 · 0 评论 -
C++string类
需要包含头文件#include <string>定义string str="Hellow World";输出cout<<str<<endl;遍历int n=str.length();for(int i=0;i<n;i++){ cout<<str[i]<<endl; cout<<str.at(i)<<endl;}分割cout<<str.substr(0,4)<<endl原创 2020-05-28 18:32:15 · 120 阅读 · 0 评论 -
C++ 正向迭代器iterstor,反向迭代器reverse_iterator
定义正向容器类名::iterator 迭代器名反向容器类名::resator_iterator 迭代器名使用正向vector<int> v;vector<int>::iterator iter;for(iter=v.begin();iter!-v.end();iter++){ cout<<*iter<<endl;}list<int> llist<int>::iterator iter;for(iter=l.原创 2020-05-28 18:00:43 · 621 阅读 · 0 评论 -
以字符串形式表示的二进制数转成十进制数字
输入一个二进制字符串,输出十进制数例:str=“1100”输出:12int getNum(string str){ int num=0; for(int i=0;i<str.length();i++){ num=num*2+(str[i]-'0'); } return num;}再加个小技巧,用来解决数字的进制转换(十六进制与十进制转换),这个用C语言写,因为只记...原创 2020-04-05 14:30:57 · 7345 阅读 · 0 评论 -
C++排序
//插入排序 void InsertSort(vector<int>& nums,int n){ for(int i=0;i<n;i++){ int temp=nums[i]; int j=i-1; while(j>=0&&nums[j]>temp)...原创 2020-04-01 11:40:06 · 109 阅读 · 0 评论 -
pair(C++中的结构模板)
一种结构,该结构提供了将两个对象视为单个对象的的功能。C++的结构模板,定义在头文件<utility>中,提供了一个包含两个数据成员的结构体模板,通过first,second访问2个成员,有operator=和swap方法pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair。(1)STL中的map就是将key和value放在一起来存放(2)当一个函数需要返回...原创 2020-03-30 11:45:50 · 322 阅读 · 0 评论 -
C++stack栈
栈:先进后出,操作的都是栈顶元素常用函数empty()判断栈是否为空,空返回真pop()移除栈顶元素push()在栈顶增加元素size()栈的元素数目top()返回栈顶元素的值树的深度优先遍历struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(N...原创 2020-03-24 11:59:50 · 165 阅读 · 0 评论 -
C++斐波那契数
满足f(1)=1f(2)=1f(n)=f(n-1)+f(n-1) n>=3称为斐波那契方法一int fib(int N){ if(N<=2)return 1; int a=1,b=1,c; for(int i=3;i<=N;i++){ c=a+b; a=b; b=c; } return c;}方法二int fib(int N){ if...原创 2020-03-21 14:09:41 · 452 阅读 · 0 评论 -
C++求最大公约数
有两个数 x、y,最大公约数g是满足x%g==0&&y%g==0最大那个任何整数与0的最大公约数是其本身,因为0除以任何数都为0。方法一int gcd(int x,int y){ if(x==0)return y; if(y==0)return x; int min; if(x>y) //取小值,最大公约数小于等于小值(0除外) { min=y; }e...原创 2020-03-21 10:56:08 · 324 阅读 · 0 评论 -
memset()、memcpy()
memset()函数原型是extern void *memset(void *buffer, int c, int count)buffer:为指针或是数组c:是赋给buffer的值count:是buffer的长度.作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。int array[10]={0};menset(array,1,5);//数组前5...原创 2020-03-18 23:01:20 · 130 阅读 · 0 评论 -
new 1个长度为10的整型的数组与分10次 new 一个长度为1的整型的数组。 哪个占用系统的空间更多些?
new 1个长度为10的整型的数组比分10次 new 一个长度为1的整型的数组占用系统的空间更多new是C++申请动态内存用的,因为new一块内存,Windows不仅会分配给你内存,还会用4字节在那段内存后作为内存分配边界。所以new10次就有10块空间加10个地址空间,new一个长度为10的数组,相当10块空间加一块地址。...原创 2020-03-18 00:11:26 · 669 阅读 · 2 评论 -
C++queue队列
队列队列,看名字能知道就能知道大概的属性,排队嘛,例如食堂打饭,先来的先打,后来的排在先来的后面。所以队列有个重要性质就是先进先出,与栈(stack)相反。只能访问 queue 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。C++在<queue.h>中有提供队列,可直接引用。队列常用函数q.push(x)将x插到队尾q.pop()弹出队...原创 2020-03-17 17:56:25 · 264 阅读 · 0 评论 -
位运算符
int a=4,b=6; //二进制a: 1 0 0b: 1 1 0&1 & 1 = 11 & 0 = 00 & 0 = 0int c=a&b; //二进制a: 1 0 0b: 1 1 0c: 1 0 0c=4;|1 | 1 = 11 | 0 = 10 | 0 = 0int c=a|b; //二进制a: ...原创 2020-03-15 16:42:30 · 111 阅读 · 0 评论 -
NULL、nullptr、0
通常定义一个指针,为了避免变成野指针,通常会给指针赋空值NULL是一个宏定义# define NULL 0,所有C++中使用0作为NULL的值,NULL==0。int *p=0;int *p=NULL;int *p=nullptr;但有时候NULL和0在重载的时候会产生歧义#include <iostream>using namespace std;void fun(...原创 2020-03-15 15:32:05 · 179 阅读 · 0 评论 -
二叉树的遍历
树的结构与链表的类似,都有指向下其它节点的指针。前中后序主要取决于根节点位置。struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){}};//前序遍历(递归) 根左右void DLR(TreeNode *root){ i...原创 2020-03-10 22:35:18 · 80 阅读 · 0 评论 -
VS2012创建win32控制台应用程序,long类型变量
写代码的时候,用long int定义了一个较大的数(int装不下的),当我使用这个变量时,便出现了问题,程序没报错,但变量值且变了,会变成负数或者其它什么乱七八糟的数,后面查下,发现在win32项目下,long int与int并无差别,如果想定义一个较大的数,可以用long long定义。验证输出int、long、long long三种数据类型的大小。int main(){ cout &l...原创 2020-03-08 00:59:29 · 287 阅读 · 0 评论 -
C/C++单链表
C/C++都是利用结构体来定义链表节点结构,有单链表,双链表,循环链表。C语言struct ListNode{ int val; struct ListNode* next;};struct ListNode* createNode(int n){ struct ListNode *headNode=(struct ListNode*)malloc(sizeof(struct L...原创 2020-03-06 10:46:04 · 199 阅读 · 0 评论