char

C++笔记(3):一些C++的基础知识点

99封情书 提交于 2020-02-26 23:05:08
前言: 找工作需要,最近看了下一些C++的基本概念,为范磊的 《零起点学通C++》,以下是一些笔记。 内容:   delete p;只是删除指针p指向内存区,并不是删除指针p,所以p还是可以用的。删除空指针所指向内存是可以的。   堆中的变量和对象时匿名的,没有名称,只能通过指针来访问。   在堆中创建对象时,在分配内存的同时会调用类的构造函数,在删除堆中对象时,会调用类的析构函数。   为了避免内存泄露,在删除一个指针后应该将其其值赋为0。   常量指针是指针指向的内存区域地址不能改变,但是该内存地址里保存的值是可以改变的,比如int a; int * const p = &a;   指向常量的指针表示指针指向的对象是不能被修改的,但是该指针可以被修改,即该指针可以指向另一块目标内存地址。比如const int a = 0; const int *p = &a; 如果A是一个类,也可以为const A* p = new A;   而指向常量的常指针表示指针本身不能被修改,其指向的内存地址内容也不能被修改。比如const int a = 0; const int * const p = &a;   引用就是别名常量。   堆中的地址是用指针来操作的,用不到别名。   如果在main函数前面的其它函数的声明和定义是一起的,则表明这个函数是内联函数!因此当该函数较长时

【CUDA】BRG2GRAY

若如初见. 提交于 2020-02-26 22:27:59
最近刚接触CUDA,先写一些简单的示例练习下。 在图像处理中,三通道彩色图像BGR到灰度图Gray,常见的一般有两种计算方式,一种是基于浮点数计算,一种是基于性能优化的通过移位的整数计算。 浮点数计算公式为: gray = 0.1140 * B + 0.5870 * G + 0.2989 * R 整数计算公式为: gray = (1868 * B + 9617 * G + 4899 * R) >> 14 ,1868从二进制的角度看,向右移位14位,相当于 ,以此类推。 下面的代码主要参考[2]进行修改得到: 头文件: funset.hpp #include <cuda_runtime.h> // For the CUDA runtime routines (prefixed with "cuda_") #include <device_launch_parameters.h> #include <cstdlib> #include <vector> int bgr2gray_cpu(const unsigned char* src, int width, int height, unsigned char* dst); int bgr2gray_gpu(const unsigned char* src, int width, int height, unsigned char*

Java编程的逻辑 (58) - 文本文件和字符流

╄→гoц情女王★ 提交于 2020-02-26 22:20:15
上节我们介绍了如何以字节流的方式处理文件,我们提到,对于文本文件,字节流没有编码的概念,不能按行处理,使用不太方便,更适合的是使用字符流,本节就来介绍字符流。 我们首先简要介绍下文本文件的基本概念、与二进制文件的区别、编码、以及字符流和字节流的区别,然后我们介绍Java中的主要字符流,它们有: Reader/Writer:字符流的基类,它们是抽象类。 InputStreamReader/OutputStreamWriter:适配器类,输入是InputStream,输出是OutputStream,将字节流转换为字符流。 FileReader/FileWriter:输入源和输出目标是文件的字符流。 CharArrayReader/CharArrayWriter: 输入源和输出目标是char数组的字符流。 StringReader/StringWriter:输入源和输出目标是String的字符流。 BufferedReader/BufferedWriter:装饰类,对输入输出流提供缓冲,以及按行读写功能。 PrintWriter:装饰类,可将基本类型和对象转换为其字符串形式输出的类。 除了这些类,Java中还有一个类Scanner,类似于一个Reader,但不是Reader的子类,可以读取基本类型的字符串形式,类似于PrintWriter的逆操作。 理解了字节流和字符流后

1360. 日期之间隔几天

╄→гoц情女王★ 提交于 2020-02-26 22:10:52
请你编写一个程序来计算两个日期之间隔了多少天。 日期以字符串形式给出,格式为 YYYY-MM-DD ,如示例所示。 示例 1: 输入: date1 = "2019-06-29", date2 = "2019-06-30" 输出: 1 示例 2: 输入: date1 = "2020-01-15", date2 = "2019-12-31" 输出: 15 提示: 给定的日期是 1971 年到 2100 年之间的有效日期。 #include<iostream> #include<algorithm> using namespace std; class Solution { public: int year(char a,char b,char c,char d){ int aa = a-'0',bb=b-'0',cc=c-'0',dd=d-'0'; return aa*1000+bb*100+cc*10+dd; } int monthOrDay(char a,char b){ int aa=a-'0',bb=b-'0'; return aa*10+bb; } bool is(int year){ if((year % 4==0&&year%100!=0)||year%400==0){ return true; }return false; } int Sum(int year ,int

【Java】栈实现表达式求值

混江龙づ霸主 提交于 2020-02-26 22:06:26
示例:3 + 4 * 3 + ( 5 - 1) # 借鉴博客: https://blog.csdn.net/qq_20009015/article/details/83870474 解题思路: 本题的难度在于如何区分优先级实现四则运算 首先定义两个栈:操作数栈用来存储操作数,操作符栈用来存储操作符 表达式的求值关键点在于运算符号的优先级,当当前符号的优先级大于栈顶的符号时,直接入栈;若当前符号小于栈顶,则计算当前操作数栈顶的两个元素;若等于,则栈顶符号出栈 优先级的定义看代码 代码: package practise; import java.io.IOException; import java.util.Stack; public class EvaluateExpression { // 定义两个栈 private static Stack<Character> stackOpr = new Stack<>(); private static Stack<Integer> stackNum = new Stack<>(); // 计算表达式 public static void main(String [] args) throws IOException { char c = (char)System.in.read(); stackOpr.push('#'); while

刷题笔记 - (updating)

故事扮演 提交于 2020-02-26 19:16:50
珍爱生命,远离ACM 自测数据三要素 昨晚题目自己优先测试数据 减少提交次数 边界数据(极大/极小) 重复数据 容易漏掉得数据 1.数组范围 一般我们记住在开数组时一定要比规定的范围多5-10个空间.否则你就会幸运踩坑 例如:限定有 10^4 个数据 那么 开设数组最好为 type [10005] 有效防止溢出或者边界问题 2.字符串空行问题 当要求我们输入两个字符串时,有时老奸巨猾的出题人会由于某种特殊情况将第一行设置为空行,这是你再想利用cin/scanf给两个字符串赋值时就会出现问题,因为他没有空行过滤所以会一直卡再输入那里, 遇到这种情况请使用getline(cin,str)!!! . 三目运算符 如果只涉及到一重if ... else ... 尽可能的用三目运算符表示 C++中将string快速转为int stoi(string) **atoi(const char*)** atoi()的参数是char类型的数组,因此对于一个字符串我们需要先将其利用c_str将该方法转为char 类型的,而stoi()参数是从 const string 类型不需要转换 例如: cout<< atoi(string::c_str()) <<endl; cout<< stoi(string) <<endl; stoi()会做边界检查,默认实在int 范围内,如果超出会runtime

为什么str=new char[strlen(s)+1]; 中要+1

徘徊边缘 提交于 2020-02-26 18:42:59
因为strlen是计算字符串有多少字符的,不包括结束符”\0“,所以加一。如"abc",占四个字节,strlen的值是3 //释放实例自身已有内存 delete[] m_pData; m_pData=NULL; //在删除自身内存以后在重新new一个长度为len+1的字符数组,类似拷贝构造函数 int len=strlen(str.m_pData); m_pData=new char[len+1]; strcpy(m_pData,str.m_pData); 来源: https://www.cnblogs.com/clemente/p/12368138.html

Java自学-多线程 常见线程方法

喜夏-厌秋 提交于 2020-02-26 18:16:34
Java 常见的线程方法 示例 1 : 当前线程暂停 Thread.sleep(1000); 表示当前线程暂停1000毫秒 ,其他线程不受影响 Thread.sleep(1000); 会抛出InterruptedException 中断异常,因为当前线程sleep的时候,有可能被停止,这时就会抛出 InterruptedException package multiplethread; public class TestThread { public static void main(String[] args) { Thread t1= new Thread(){ public void run(){ int seconds =0; while(true){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.printf("已经玩了LOL %d 秒%n", seconds++); } } }; t1.start(); } } 示例 2 : 加入到当前线程中 首先解释一下 主线程 的概念 所有进程,至少会有一个线程即主线程,即main方法开始执行,就会有一个 看不见

JarvisOJ (pwn)guess

删除回忆录丶 提交于 2020-02-26 14:50:27
先看一下函数结构: main: int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { struct sockaddr addr; // [rsp+0h] [rbp-20h] __pid_t v4; // [rsp+14h] [rbp-Ch] int v5; // [rsp+18h] [rbp-8h] int fd; // [rsp+1Ch] [rbp-4h] fd = socket(2, 1, 0); if ( fd == -1 ) { perror("unable to create server socket"); exit(1); } *&addr.sa_family = 0LL; *&addr.sa_data[6] = 0LL; addr.sa_family = 2; *addr.sa_data = htons(0x270Fu); if ( bind(fd, &addr, 0x10u) ) { perror("unable to bind socket"); exit(1); } if ( listen(fd, 16) ) { perror("deaf"); exit(1); } while ( 1 ) { while ( 1 ) { v5 = accept(fd, 0LL

LeetCode周赛-177

我只是一个虾纸丫 提交于 2020-02-26 14:30:06
1.日期之间隔几天 【思路】计算两个日期和1970-1-1之间相隔的天数,然后相减即可。需要注意闰年闰月的判断。 int getday(int *d1){ int month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int day1=0,i; for(i=1970;i<d1[0];i++){ if(i%400==0||(i%100!=0&&i%4==0)){ day1+=366; }else{ day1+=365; } } for(i=1;i<d1[1];i++){ day1+=month[i-1]; if(i==2){ if(d1[0]%400==0||(d1[0]%4==0&&d1[0]%100!=0)){ day1++; } } } day1+=d1[2]; return day1; } int* getdate(char * date){ int i,len,top=0; int *num=(int*)malloc(sizeof(int)*3); // memset(num,0,sizeof(num)); num[0]=0;num[1]=0;num[2]=0; len=strlen(date); for(i=0;i<len;i++){ if(date[i]=='-'){ top++;continue; } num[top]