C++ 之标准库类型—— vector 容器 标准库类型vector表示对象的集合,其中所有对象的的类型都相同。集合中的每对象都有一个与之对应的索引,索引用于访问对象。因为 vector “容纳”着其他对象,所以他也常被称为容器(container). 注意需要有包含有头文件,如果做上了using 就更好了,如下: #incldue<vector> using std::vector; 说实话,一开始的时候,我接触到这个vector这个概念是完全懵逼的,再看书上的实例也是晕晕的,但是等我做完课后题后,突然就恍然大悟了。 定义和初始化vector 对象 dog vector支持的操作 v.empty() 若其中不含有任何元素,返回真,否则假 v.size() 返回其中个数 v.push_back(t) 向V的尾端添加元素 v[n] 返回第n个位置上的值的引用 v1 =v2 用V2中元素拷贝替换v1中的元素 v1 = {a,b,c…} 用列表中的 继续阅读 >>


刘嘉辉 17/11/06 15:35:23
KMP算法的实现 假如你急着要跟MM急着约会,抱团取暖,就直接调到下面看吧,我爱啰嗦,全部看完的话,我怕你会忍不住想打我。 kmp算法又称“看毛片”算法,但我作为跟根正苗红的社会主义接班人, 外加吃货属性 ,所以我还是偏向叫它“烤馍片”算法,此算法是一个效率非常高的字符串匹配算法。比之bf暴力其实在某些情况下也没高到哪里去的啦。 KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者!! 开始不懂的时候,我在网上搜索资料,据说此算法是与红黑树,Manacher,遗传算法。。。等等可以强势提升逼格的牛逼算法之一。 本着geek精神,经过一天的琢磨,凭借着搞不出来就不睡觉的社会主义建设者的拼搏精神终于在昨天的晚上顺利解决。喜迎十九大嘛。 多亏了小组温暖的空调(三十几度)。23333333~~~ 提到KMP绕不开的就是BF暴力搜索了首先有这样两行字符串 第一行是主串str,第二行叫模式串ptr,要做的很简单,就是想在主串中找到一个子串使得它 继续阅读 >>


刘嘉辉 17/10/10 18:01:13
LINUX_C 线程总结(二) 话不多说,我们先来看一段代码 /************************************************************************* > File Name: condition.c > Author:九五二七 > Mail: > Created Time: 2017年08月02日 星期三 07时59分08秒 ************************************************************************/ #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<pthread.h> pthread_mutex_t mutex; //静态 pthread_cond_t cond; void *thread1(void *arg) 继续阅读 >>


刘嘉辉 17/08/05 11:13:55
LINUX_C 线程总结(一) 首先来说说我所理解的线程: 但是谈线程又不得不得提一下进程,程序,这三者的联系 或许弄清楚这三种的联系之后,我们或许能够更好的来对这些系统级的实体有一个更加深刻的认知。 程序,进程,线程这三者之间的关系? 简单来说,一程序可以调用多个进程,比如一个视频播放器程序,里面就存在两个进程:一个是播放视频的进程,一个是下载上传视频的进程。 一个进程又同时调用多个线程, 这个线程是隐藏的,用进程管理器看不到,可用其它的进程管理软件来查看。 三者的逻辑关系是程序调用进程,进程调用线程,一般来说程序下面都是多进程,不同的进程分工不同;进程下面也基本上是多线程的。 可以这样下定义:进程是系统进行资源分配和调用的独立单位,每一个进程,都由它自己的内存空间和系统资源 线程是进程的执行单元,执行路径,线程也是程序使用CPU的最基本单位 学习过程中都能踩了那些坑 i.首先, 就是线程创建函数 c include 这函数比较坑的一点就是实际用到的时候他的第2,4,项参数是null,那 继续阅读 >>


刘嘉辉 17/08/05 10:54:06
dup和dup2 最近写那个 myshell 需要用到多管道 以及重定向方面的知识,实现过程中 其中避不开的一个函数就是我的标题dup 与dup2 它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin(0)、stdout(1)和stderr(2)。 函数原型 #include <unistd.h> int dup( int oldfd ); int dup2( int oldfd, int targetfd ); dup()函数 利用函数dup,我们可以复制一个描述符。传给该函数一个既有的描述符,它就会返回一个新的描述符,这个新的描述符是传给它的描述符的拷贝。这意味着,这两个描述符共享同一个数据结构。 dup2()函数 dup2函数跟dup函数相似,但dup2函数允许调用者规定一个有效描述符和目标描述符的id。dup2函数成功返回时,目标描述符(dup2函数的第二个参数)将变成源描述符(dup2函数的第一个参数)的复制品,换句话说,两个文件描述符现在都指向同一个文件,并且是函数第一个参数 继续阅读 >>


刘嘉辉 17/07/30 18:13:34
进程相关 基本概念 僵尸进程 : 一个进程使用fork创建子进程,如果子进程退出, 而父进程没有调用wait或waitpid来获取子进程的状态信息,那么子进程的状态描述符依然-保存在系统中,这种进程被称为僵尸进程(用个形象而重口的解释就是:子进程突然挂掉了,他爸还不来管,魂魄(子进程的状态描述符)游离于系统中,无人超度,占用天地灵气(进程号),最后导致成为僵尸)。 孤儿进程 : 父进程已经退出,而一个子进程或多个子进程还在运行,此时孤儿进程就会被 init(系统一号进程),并由init 完成对这些孤儿子进程完成状态收集工作。(说是孤儿,其实还是会被收养)。 (init进程是内核启动的第一个用户级别的进程,他总是第一个进程,他的进程号总为一,他没有父进程,如果一个子进程一级一级向上查看父进程,最终就会看到init进程其名是为(systemd)) 形式 区别 僵尸进程 子进程挂,无人问津 孤儿进程 父进程挂,被init领养 重点函数fork vfork fork调用的一个 继续阅读 >>


刘嘉辉 17/07/30 17:43:41
第六章文件操作总结 首先 看书学到的一个字节觉得特别有用的找bug的方法 c /自定义的错误处理函数/ void my_err(const char * err_string, int line) { fprintf(stderr,”line: %d”, line); //调用是这样,my_err(“err_string”,LINE); LINE为预编译器内置宏获取行号 perror(err_string); exit(1); } “` 打开文件 函数功能: 打开文件并返回文件描述符,其他功能视参数而定。 函数原型及解释 int open(const char *path, int oflag, …); //一般使用的两种形式: int open(const char *path, int oflag); int open(const char *path, int oflag, mode_t mode); 1. path:要打开的文件位置,既可以是绝对 继续阅读 >>


刘嘉辉 17/07/24 21:56:35
windows下的代码向linux平台移植的问题 经常有人发现自己在windows下写的代码到了linux下不能跑,这种清楚除了一些常见的库函数不支外, 其实更加坑的是发下连正常的显示都不可以了,让人头疼无比。终于不负有心人,经过查询发现了一种>方法可以解决掉这个问题方法如下 安装所需软件 $ sudo apt-get install zh-autoconvert $ sudo apt-get install zhcon 配置系统 $ vi /var/lib/locales/supported.d/local 加入 zh_CN.GBK GBK zh_CN.GB2312 GB2312 $ sudo locale-gen 终端设置 终端->菜单->终端->设定字符编码->添加或删除, 添加GB18030 终端->菜单->终端->设定字符编码->简体中文 设置当前用户使用的字符集 export LANG= 继续阅读 >>


刘嘉辉 17/07/17 21:04:20
linux 下一些比较有趣的命令 在过去几周刚刚完成的 TTMS 课设中,为避免自己的程序效果千篇一律,为增强视觉上的用户体验,我同意特意在网上找了几个比较有趣的命令,拿出来和大家分享一下。 先来一个经典小火车吧 安装如下 sudo apt-get install sl ( LS 也可以 ) 运行直接就 sl 就 OK了 这个还有要说的一点就是 由于这个命令和 ls 很像,所以你可以给别人的电脑搞搞恶作剧 比如这样 $alias ls=sl 这样以后估计他想ls的的时候就得满屏跑火车了 你说气人不气人。 ————————————————————————————————————————————— 接下来是一个满屏字母数字特别酷炫的一个命令 cmatrix 安装如上 怎么样是不是很吊 —————————————————————————————— 艺术字生成器,由ASCII字符组成,把文本显示成标题栏。此外还有这个 toilet 命令 继续阅读 >>


刘嘉辉 17/07/17 20:43:44
关于软工课设—TTMS 的一些小小心得 刚刚结束不久的课程设计应该是我上大学学习计算机以来接触过最为复杂的代码了,其形式之新,代码量之庞大,业务需求之复杂,确确实实是让我这只小菜鸡蒙逼了好一阵子,索幸最后在学长及同学的帮助之下还是磕磕绊绊的完成了任务。接下就具体说一下我遇到的一些问题,和我的一些感想吧。 首先,系统形式上的问题,此次接触到的TTMS在系统逻辑架构的设计上,使用了目前广泛使用的分层架构模式,将软件分为如下图所示: 不得不说这种架构的确是业界比较流行的,有以下优点,易升级,易维护,有利于分工协作。说是分层,其实我们小组就大部分让我一个人来写,却实累得我半死。幸好,课设结束那天晚上他们说出去请我吃大餐,(我自然也不能客气,基本上啥菜贵点啥,差点跟我翻脸)。 再一个,代码量的确是非常大的,而且是多文件系统,保守估计(加上系统给的样本)应该破五千行了,在这里,给可爱的劳资点个赞(23333333)。 还有就是业务需求比较复杂,如图每种用户类型对应的功能也 继续阅读 >>


刘嘉辉 17/06/25 17:41:49