
C/C++
niliushall.
这个作者很懒,什么都没留下…
展开
-
数组名与函数的结合使用注意项
数组名即数组的首地址,故数组名属于指针变量,在定义函数使数组名作为形参时,要把对应的参数定义为指针变量。因为数组没有特定的使其读入停止的标志,因此还要有确定数组长度的参数,即用户自己输入数组长度。代码如下:# include void f (int *x,int len){ int i; for(i=0;i printf("%d ",*(x+i)); //原创 2017-05-30 09:26:08 · 494 阅读 · 0 评论 -
[codevs] 1098 均分纸牌
均分纸牌 题目描述 Description有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。 现在要求找出一种移动方...原创 2018-03-05 16:55:40 · 286 阅读 · 0 评论 -
虚析构函数
需要虚析构函数的原因:首先看一下这段代码:#include <iostream>using namespace std;class A {private: int *a;public: A() { a = new int; cout << "A::A() is called.\n"; } ~A() { delete a; c...原创 2018-04-15 11:40:39 · 326 阅读 · 0 评论 -
静态多态 动态多态
一. 静态多态1. 何为静态多态?又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数。例如:函数重载,通过类成员运算符指定的运算。2. 示例代码函数重载示例:class A {public: A() {} A( int x ) {} void f() {} void f( int x ) {}};class B {p...原创 2018-04-15 19:00:38 · 6195 阅读 · 0 评论 -
c++ STL 全排列
在c++的STL中有函数可以直接对数组元素进行全排列,即next_permutation和pre_permutation,这两个函数都可以实现全排列,只是排列的顺序不同,next_permutation作用为向后排序,而pre_permutation作用为向前排序。需要头文件#include <algorithm>示例#include <iostream>...原创 2018-04-24 22:50:15 · 4483 阅读 · 0 评论 -
继承与动态内存分配
继承与动态内存分配 在基类或派生类中含有指针时,要考虑内存分配情况(new与delete),还要考虑在进行对象间赋值时指针隐藏的问题(使用默认复制构造函数在析构时会造成原对象中的指针指向的内存空间被释放,为浅复制)因此需要: 1. 重载运算符’=‘、’<<‘,实现深度复制; 2. 在构造函数中使用new进行动态内存分配,在析构函数中使用delete进行内存释放; 3. ...原创 2018-05-16 23:37:26 · 557 阅读 · 0 评论 -
友元函数 友元类 友元成员函数
友元 一般来说,类内的私有数据是对外不可见的,但在有些情况下,我们需要在类外对该类的私有数据进行访问,这就需要用到一种新技术——友元(friend),即在声明前添加关键字friend。友元关系是单向的,即如果A是B的友元,但B不一定是A的友元; 友元关系无传递性,即如果A是B的友元,B是C的友元,但A不一定是C的友元。1. 友元函数友元函数是指某些非类成员函数,但可以访问类...原创 2018-05-07 22:34:40 · 5548 阅读 · 2 评论 -
【动态规划】01背包问题
01背包问题 问题描述给定 N 种物品和一个最大载重量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?问题分析对于每个物品,只能选择装或者不装,不能选择只装物体的一部分,因此不能使用单位重量的价值进行排序的方法(贪心)来解决,需要用到动态规划来解决。动态规划的三个核心最优子结构...原创 2018-06-03 19:49:16 · 4366 阅读 · 0 评论 -
链表中环的入口结点
题目链接链表中环的入口结点(牛客网)题目分析类似于追及问题:如何判断有环的存在? 在追及问题中,我们可以用两个速度不同的物体从同一地点出发,如果相遇则证明存在环(可用反证法证明,若不存在环,则速度不同的物体从同一地点出发则一定不会相遇),因此可以类比过来,定义两个指针fast、slow,令两指针以不同速度向后指,则相遇时证明有环存在,若fast指向NULL,则不存在环。怎么找...原创 2018-05-24 23:03:05 · 5008 阅读 · 9 评论 -
基于epoll+threadpool的webServer分析与实现
该webServer使用epoll+threadpool实现,支持GET、POST方法,并添加CGI进行数据计算并返回网页信息,可以解析返回html、picture、mp3、js、css等文件,可以实现稳定的运行。 使用c++编写。源码请看我的Github。流程简述启动服务器,在浏览器输入服务器地址,将向服务器发送HTTP请求服务器接收数据,新建任务,将任务添加到任务队列从线程...原创 2018-07-28 16:45:42 · 935 阅读 · 3 评论 -
线程池的分析与实现
在需要频繁开线程时,创建和销毁线程会话费大量时间,为了提高效率,我们可以在任务开始前,先创建一定数量的线程。这样在接收到任务时,就可以直接使用线程池中处于wait状态的线程,在任务结束后线程回到wait状态,等待新任务的到来,这就避免了线程的创建与销毁,从而提高程序执行效率。所需数据需要存储有多少线程( int thread_number )需要开辟对应的数组,存储线程号( pth...原创 2018-07-28 10:35:57 · 413 阅读 · 0 评论 -
【高性能定时器】时间堆(最小堆)
最小堆及其应用:时间堆 最小堆及其应用:时间堆 一、 堆1. 概念2. 最小堆的实现3. 性质4. 代码二、时间堆1. 概念简述2. 实现细节3. 代码一、 堆1. 概念 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左子节点和右子节点的值。其中,两个叶子节点的大小没有顺序。堆又分为两...原创 2018-08-01 17:15:12 · 10471 阅读 · 4 评论 -
CodeForce 2A —— Winner
A. Winner The winner of the card game popular in Berland “Berlogging” is determined according to the following rules. If at the end of the game there is only one player with the maximum number of p...原创 2018-03-01 17:25:13 · 715 阅读 · 0 评论 -
最佳加法表达式
最佳加法表达式 题意描述输入n个数字,给m个加号,将所有加号任意放在n个数字中某位置,要求最终得到的加法表达式的结果最小。INPUT4 2 1 2 3 4OUTPUT19分析本题使用动态规划,将原问题分解为:求前i个数字中放入m-1个加号的最佳加法表达式的值,再加上最后剩余数字的值。即dp[n][m] = Min{ dp[i][m-1] + Num[i+1][原创 2018-02-07 17:50:48 · 1069 阅读 · 0 评论 -
Ananagrams Uva 156
Ananagrams (map的使用) Most crossword puzzle fans are used to anagrams–groups of words with the same letters in different orders–for example OPTS, SPOT, STOP, POTS and POST. Some words however do not...原创 2018-02-11 18:16:30 · 398 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针和指针数组的区别 数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a;原创 2017-05-30 09:26:51 · 444 阅读 · 0 评论 -
linux兴趣小组2017面试题浅析
linux兴趣小组2017面试题 1. 分析下列程序的输出.int main(int argc, char *argv[]){ int t = 4; printf("%lu\n", sizeof(t--)); printf("%lu\n", sizeof("ab c\nt\012\xa1*2")); return 0;}若运行printf("%d\n",原创 2017-05-30 09:26:56 · 714 阅读 · 0 评论 -
linux兴趣小组2017面试题浅析
linux兴趣小组2017面试题 1. 分析下列程序的输出.int main(int argc, char *argv[]){ int t = 4; printf("%lu\n", sizeof(t--)); printf("%lu\n", sizeof("ab c\nt\012\xa1*2")); return 0;}若运行printf(“%d\n”,t);原创 2017-06-03 15:47:43 · 459 阅读 · 0 评论 -
再见“小明爬楼梯”问题
在c语言期末考试中,再次见到了“小明爬楼梯”问题,而第一次见到是在某次面试题中,由于当时还没有学到递归部分,因此就仅仅把代码看了一下,然而其中包含的思想却没有弄清楚,因此在考试时见到该题一头雾水,因此总结一下,以绝后患。先上题: 可爱的小明特别喜欢爬楼梯,他有的时候一次爬一个台阶,有的时候一次爬两个台阶,有的时候一次爬三个台阶。如果这个楼梯有n个台阶,小明一共有多少种爬法呢?该题为典型的`原创 2017-07-03 16:43:06 · 7429 阅读 · 5 评论 -
linux下隐藏输入密码
在做课设时,因为在windows上写了一个输入密码时屏幕显示为***的函数,但是在移植到linux系统上时却有问题,提示有错误。上网搜索,有人说getch()函数的头文件是curses.h,还有人说是conio.h, 但是在ubuntu系统中都不能使用,再次搜索发现getch()函数并非c标准库函数,所以可能在其他系统中不支持。因此找到了getpass()这一函数,实现在linux上密码隐藏输入的问原创 2017-07-04 22:42:37 · 2506 阅读 · 3 评论 -
邮箱验证 ——ACM
邮箱验证POJ 注册的时候需要用户输入邮箱,验证邮箱的规则包括: 1)有且仅有一个'@'符号 2)'@'和'.'不能出现在字符串的首和尾 3)'@'之后至少要有一个'.',并且'@'不能和'.'直接相连 满足以上3条的字符串为合法邮箱,否则不合法, 编写程序验证输入是否合法Input输入包含若干行,每一行为一个代验证的邮箱地址,长度小于100Output每一行输入对应一行输出 如果验原创 2017-07-18 12:29:17 · 3305 阅读 · 2 评论 -
dfs算法练习
1. Find The Multiple ( POJ 1426)Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may原创 2017-07-30 20:43:04 · 1763 阅读 · 0 评论 -
Lowest Common Multiple Plus ——ACM
求n个数的最小公倍数。Input输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。Sample Input2 4 63 2 5 7Sample Output1270该题只要按顺序向每两个求最小公倍数即可,并将所得倍数与下一个数字再进行运算求最小公倍数,循环最终得到原创 2017-07-19 12:26:03 · 770 阅读 · 0 评论 -
C++学习笔记(一)
本文主要内容为C++下的输入输出函数以及for循环中的C++11新特性。一、输入输出函数1. cincin 遇到 空格、回车、Tab结束输入, 且会将读到的空格、回车、Tab 丢弃,例:#include<iostream>using namespace std;int main(void) { char a[10]; cin >> a; cout << a << endl;原创 2017-11-01 21:33:38 · 342 阅读 · 0 评论 -
C++学习笔记(二)
本文将主要介绍const关键字的使用。首先,说一下const是什么: const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。然后,我们来看一下这四处声明:const int a = 1; //code1const int *p = &a; //code2int * const p = &a; //code3const int * const p = &a; //co原创 2017-11-19 22:55:44 · 281 阅读 · 0 评论 -
C++学习笔记(三)
1. 引用变量引用是已定义变量的别名,若使用int & x = a;,即将x作为a的引用,其中的&不是地址运算符,而是类型标识符的一部分。事实上,x与a指向的是同一块内存空间,对x进行操作即对a进行操作。必须在声明引用变量时进行初始化。 /* ** 该程序试图通过指针改变引用变量x的指向 ** 体现了引用与指针的区别 */ int a = 100; int原创 2017-12-04 22:33:36 · 205 阅读 · 0 评论 -
【操作系统】生产者消费者问题
生产者消费者模型 生产者消费者模型 一、 生产者消费者问题二、 问题分析三、 伪代码实现四、代码实现(C++)五、 互斥锁与条件变量的使用比较一、 生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案...原创 2018-08-11 00:43:20 · 172568 阅读 · 33 评论