
C/C++
moxiaomomo
虚怀若谷,大爱无疆
展开
-
trie树--详解
trie树--详解文章作者:yx_th000 文章来源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 转载请注明,谢谢合作。关键词:trie trie树 数据结构 前几天学习了并查集和trie树,这里总结一下trie。 本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此不做详解。l Trie原理Trie的核心思转载 2010-10-19 21:32:00 · 966 阅读 · 0 评论 -
TCP服务器设计范式 - 每个客户连接对应一个线程
如果服务器支持线程,那么对于客户/服务进程的架构我们可以采取一个线程处理一个客户连接的设计方案。也就是每当有新的连接请求到达服务器时,服务器会新开一个子线程来专门处理这个连接的信息传递;这种方法类似于服务器为每个客户连接fork一个子进程,但这相对来说更轻量级。1.首先初始化服务器信息(部分代码):if ((servfd = socket(AF_INET,SOCK_STREAM,0)) <原创 2012-05-17 15:02:34 · 6014 阅读 · 7 评论 -
字符串的部分库函数的实现
受July(http://hi.csdn.net/v_JULY_v)影响,学C++的,应该懂得一些库函数的实现原理,于是将几个类似于strcmp的函数实现了一下。可能还有一些潜在的bug,会继续完善和添加其他函数的实现。 //查找字符串中的子串int mystrstr1(const char* string,const char* substring){ if(string==原创 2011-05-21 23:12:00 · 1918 阅读 · 2 评论 -
网络最大流问题
2010-10-31 10:19:36初学了一下网络流算法,站在前人的肩膀上,参考了不少资料,总结了一下学习经验:准备知识:(参考资料)1.Dijkstra算法 适用于满足所有权系数大于等于0(lij≥0)的网络最短路问题,能求出起点v1到所有其他点vj的最短距离; 朴素的Dijkstra算法复杂度为O(N^2),堆实现的Dijkstra复杂度为O(Nl原创 2010-10-31 10:29:00 · 5486 阅读 · 4 评论 -
【Qt开发】QTableWidget 判断cell内容为空
判断cell内容为空, 可以这样实现:if(ui->tableWidget->item(i,j)==NULL|| //判断指向该cell的指针是否为空 (ui->tableWidget->item(i,j)&& ui->tableWidget->item(i,j)->text()==tr("")) //判断该cel原创 2011-04-16 20:22:00 · 8506 阅读 · 0 评论 -
【Qt开发】Qt gui添加右键菜单事件
要在某一种窗体内添加右键菜单栏,比如在QTreeWidget中添加,可以用到slot函数customContextMenuRequested(QPointpos)。 如果是在Qt Creator中,则操作过程为:右击QTreeWidget-->go to slot---->选择customContextMenuRequested(QPointpos)。然后,在新建的cust原创 2011-06-14 01:02:00 · 18004 阅读 · 6 评论 -
【Qt开发】QString,std::string,char*,int等类型数据的转换
QT中三种数据类型之间的转换: QString qtStr; std::string stdStr; char* chStr;则有:(1)qtStr = stdStr.c_str(); qtStr = QString(chStr);(2)stdStr = qtStr.local8Bit(); 或者stdStr=qtStr.toStdString;(3)原创 2011-06-29 01:09:00 · 9455 阅读 · 0 评论 -
【Qt开发】Qt4 TextEdittor将内容保存到QString对象
初学Qt不久,很多东西既新鲜又陌生呀。而最近一直奇怪怎么没有TextEdittor中text()这个函数...纠结了那么久,原来就那么简单!解决方法如下:QString s=ui->textEdit->toPlainText();QString是Qt库中对C++源生字符串类型的一种封装。标准C++中只提供了两种字符串: C风格的以'\0'作为结束符的字符数组;和std::str原创 2011-04-13 12:50:00 · 2130 阅读 · 1 评论 -
【Qt开发】Qt 捕捉窗口关闭事件与信号的捕捉
有时候我们希望在关闭窗口之前做一些操作,例如保存缓存数据或向用户提示是否关闭窗口等等。由于一般的窗口都是继承自QWidget, 那么我们可以通过覆盖QWidget中的虚函数closeEvent(QCloseEvent* event);来达到这个目的。(1)首先添加依赖库:#include (2)接着声明和定义closeEvent函数: a).h文件p原创 2012-05-21 14:56:20 · 35270 阅读 · 2 评论 -
【C/C++】C实现gzip格式的压缩与解压Demo
参考链接:http://www.codeproject.com/Questions/341319/C-Decompress-Gzipped-http-responsehttp://www.cppblog.com/woaidongmao/archive/2011/06/05/148089.htmlhttp://stackoverflow.com/questions/13762918原创 2016-08-31 15:52:03 · 22555 阅读 · 20 评论 -
【C/C++】C语言读取简单配置文件
用C写了个加载配置文件的demo简单程序, 按行支持 key=val 的格式以及行注释/文本注释等。以下贴下代码, 纯当笔记:#include #include #include #define MAX_BUF_LEN 1024#define MAX_KEY_LEN 64#define MAX_VAL_LEN 256int Trim(char s[]){ int原创 2016-08-26 15:12:40 · 8853 阅读 · 2 评论 -
effective STL课堂笔记1-----如何选择合适的容器
<br />首先是容器分类:<br /> <br /> (1)标准STL序列容器:vector、string、deque和list。<br /> (2)标准STL关联容器:set、multiset、map和multimap。<br /> (3)非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串。<br /> (4)非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。<br /> <br />接着如原创 2011-05-24 01:38:00 · 1174 阅读 · 0 评论 -
STL读书笔记--- 迭代器概念
一。概念1)迭代器在设计模式中成为iterator模式,其定义为:提供一种方法,使他能够按顺序遍历某个聚合体(容器)所包含的所有元素,但又不需要暴露该容器的内部表现方式。2)迭代器是一种类似指针的对象,他的工作也主要是内容提取(dereference)和成员的访问(m原创 2011-08-07 11:13:29 · 1442 阅读 · 0 评论 -
C++ 智能指针auto_ptr类
转载自:http://www.cnblogs.com/mydomain/archive/2011/04/15/2017424.html 1、auto_ptr为标准库提供的“资源分配即初始化”类,是接受一个类型形参的模板,它为动态分配的对象提供异常安全特性。在memory头转载 2011-09-27 23:03:32 · 1566 阅读 · 0 评论 -
STL笔记---B树,B+树,RB树
一。红黑树(RB-Tree)红黑树是每个节点都有’颜色’特征的平衡二叉查找树。除了一般平衡二叉树做具备的条件,它还具有如下特征:1) 节点的颜色是红色或者黑色;2) 根节点的颜色是黑色的;3) 如果一个节点时带红色属性的,那么它的子节点必须是黑色的;原创 2011-10-06 10:28:57 · 5816 阅读 · 0 评论 -
STL中基本容器string,vector,list,deque,set,map之间的区别
在STL中基本容器有: string、vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问;set: 集合, 用来判断某一个元素是不是在一个组里面,使用的比较少;map: 映射,相当于字典,把一转载 2011-10-06 11:13:24 · 3576 阅读 · 0 评论 -
C中多个宏字符串拼接
之前在做两个字符串的拼接,一般都是用strcat函数, 即使是宏定义的字符串。比如定义了宏A, B, 第一反应会用 A"other"这样的拼接方式, 却不会没反应过来 A B 也可以做拼接。基础不扎实,好二好二。宏字符串可以这样拼接:#define A "xxx"#define B "yyy"void main(){ char* str = A B; pri原创 2016-12-04 14:34:11 · 15777 阅读 · 0 评论 -
【EmbeddedDev】使用消息队列进行进程间通信
假设有两个进程, 一个进程专注于串口信号的检测, 一个进程专注于根据不同信号进行对应功能的控制。这个时候需要进行进程间通信。我选择了消息队列进行尝试, 消息队列对于命名管道的一个好处是, 即使进程挂了, 消息队列依然还在, 重启后还能对原来的队列进行读写, 数据因而不会丢失。在Beaglebone Black的debian7.5系统上实现运行后, 发现MQ的队列长度默认最大为16。 这个貌原创 2016-12-03 12:38:27 · 1004 阅读 · 0 评论 -
【EmbeddedDev】通过mmap方法访问ADC/GPIO
正常通过文件系统访问AIN串口的值, 可以使用fread等文件IO方式读取/sys/bus/iio/devices/iio:device0/in_voltage*_raw的内容。但是这样在需要高频获取ADC值得情况就显得效率很低下, 数据需要从磁盘拷贝到内核进程空间, 然后再拷贝到用户进程空间, 消耗无谓的资源。可以通过内存影射的方式来解决这个问题, mmap可以实现磁盘数据到用户主存的一原创 2016-12-03 12:10:45 · 1663 阅读 · 0 评论 -
【Qt开发】Qt GUI编程中设置输入等待
比如有一个关于问答游戏的程序,程序只有在输入当前问题的答案才会继续提问下一个问题,而输入答案是由玩家来操纵的,程序要时刻监测输入情况。 这种问题在控制台很容易解决,在Qt GUI应用程序则要用到线程来解决, #include //......代码省略while(!isSend)//isSend是输入答案的确认变量 { QCoreApplication::proce原创 2011-05-31 22:20:00 · 2184 阅读 · 0 评论 -
C++中的前置声明(Forward Declaration)
兜兜转转,因为要做Qt的项目,又要重新拾起C++这个对于我来说是启蒙语言的编程工具了。因为是第一次自己负责设计项目的架构,显得有些激动和有点迷茫。不过还好,感觉自己慢慢挺过来。基本的结构设计文档已写完和基本的工程框架已经搭好,很快就可以进入正式的编码阶段。今天写模块类文件的一个收获是,在定义头文件时,能依赖前置声明的就不要依赖定义,同时在适当的情况下应该用类型的前置声明来减少头文件原创 2012-10-17 21:53:37 · 16339 阅读 · 0 评论 -
使用gdb调试程序详解
熟练使用gdb是一个linux下开发人员必备的一项技能,我们由浅入深的学习一下gdb的强大功能。一.gdb简单介绍名称 gdb - GNU 调试器提要 gdb [-help] [-nx] [-q] [-batch] [-cd=dir转载 2011-09-07 21:58:58 · 1572 阅读 · 0 评论 -
C++ 消息序列化与反序列化
1. 消息序列化 将具有一定结构的数据转换成可以存取或者可以传输的形式,比如转换成字符流的形式(char *)。通过序列化后,消息可以在系统各逻辑模块或者网络中传输。 2.消息反序列化 顾名思义,反序列化与序列化的过程相反。例如,将网络中传过来的放原创 2011-07-31 10:21:50 · 8170 阅读 · 3 评论 -
Ice笔记--C++线程与并发(二)
线程1.Thread类 1.1概述 Ice中的基础线程是由ThreadControl类和Thread类来提供的(在IceUtil/IceUtil.h中定义): Thread类是一个抽象基类,拥有一个纯虚方法run。要创建线原创 2011-08-31 21:43:57 · 7034 阅读 · 0 评论 -
内存池:简单的内存池的实现
转载自:http://blog.sina.com.cn/s/blog_46ed82810100ch8h.html 当频繁地用malloc申请内存,然后再用free释放内存时,会存在两个主要问题。第一个问题是频繁的分配释放内存可能导致系统内存碎片过多;第二个问题是分转载 2011-07-31 11:01:05 · 2293 阅读 · 2 评论 -
栈操作的C++实现
<br />温习一下数据结构,写了一个栈操作的模板...<br />第一次写的时候还忘了写析构函数,要吸取教训啊。<br />代码:<br />#ifndef STACK_H#define STACK_H#include<stdio.h>#include<stdlib.h>#include <iostream>using namespace std;template<class T>class Stack{public: int top; int maxt原创 2011-05-04 10:17:00 · 1349 阅读 · 0 评论 -
const的几个用法
(1)const定义常量: const dataType constData=value;//const修饰的类型为dataType的变量value不可变.(2)指针中使用const,主要有三种方式 a.指针本身是常量,它本身不可变 char* const ptr; b.指针所指向的内容是常量,指向的内容不可变 const原创 2011-06-10 16:06:00 · 2947 阅读 · 1 评论 -
求一个unsigned int 数的二进制表示中有多少个1?
第一种方法,使用普通循环:unsigned int GetBitNum1(unsigned int nValue){ const unsigned int nNumOfBitInByte = 8; unsigned int tempMask = 1; unsigned int n = 0; for(unsigned int i = 0 ; i 或者unsigned int GetBitNum2(unsigned int nValue){ const unsigned int nN原创 2011-04-18 09:44:00 · 3459 阅读 · 0 评论 -
关于C++二维指针
二维数组指针<br /> 源文地址:http://www.cnblogs.com/carekee/articles/1948326.html<br /> 概括的说,指针其实就是可变数组的首地址,说是可变数组,是 <br />指其包含内容的数量的可变的,并且是可动态申请和释放的,从而充 <br />分节约宝贵的内存资源。我一向喜欢一维数组,除非万不得已,我一 <br />般是不用二维数组的,多维的则更是很少涉足了。因为一维简单,容 <br />易理解,而用指针指向的多维数组就具有相当的复杂性了,也因此更转载 2011-04-01 23:54:00 · 12316 阅读 · 2 评论 -
Ice笔记--服务端的Slice-to-C++
一、初始化和结束服务器端Ice run time 初始化和结束服务器端Ice run time的实现可分为三种方式:常用main函数实现,利用Ice::Application类实现,利用Ice::Service类等。 1)服务端main函数原创 2011-08-26 10:06:21 · 3679 阅读 · 1 评论 -
Ice笔记--C++线程与并发(小结)
C++线程与并发(Ice3.4.2)概述Ice服务器是多线程模型的。在涉及资源的访问和操作的时候将要考虑同步访问机制。Ice线程库提供了一些与线程有关的抽象:互斥体,递归互斥体,读写递归互斥体,监控器,一个线程抽象,允许开发者创建,控制,销毁线程。 1.互原创 2011-09-01 23:29:36 · 4787 阅读 · 0 评论 -
C++中const的实现细节(C、C#同理)
1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:) 2、为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。 3、cons有什么主要的作用? (1)可以定义const常量,具有不可变性。 例如: const转载 2012-09-16 21:51:56 · 1949 阅读 · 0 评论 -
学习设计模式---C++单例模式
首先展示一个最简单的单例模式例子,代码如下:class NetworkService{public: // 对外提供的唯一方法函数,用于获取唯一的对象指针 static NetworkService* GetInstance() { if(m_pInstance == NULL) { m_pInstance原创 2012-05-28 13:59:19 · 1910 阅读 · 1 评论 -
四则运算的实现
继续温习数据结构...实现用到了两个栈:操作数栈与操作符栈。主要过程是将中序表达式转换为后续表达式,然后按顺序进行运算。简单过程:1+8-7(中序) ---->1 8 7 - + (后序)--->1 1 + (运算8-7)---> 2 (运算1+1)原创 2011-05-04 10:43:00 · 1778 阅读 · 3 评论 -
求二叉树的节点总数与高度
采用经典的递归遍历: struct BTree{ int data; BTree* left; BTree* right;};int nodes(BTree* t)//获取节点数{ if(t==NULL)return 0; //当前节点为NULL e原创 2011-04-20 22:03:00 · 5930 阅读 · 2 评论 -
C++虚函数与多态
一提起C++的多态,很自然就想起了函数重载和虚函数的实现。函数重载是在编译时实现的一种多态,而运行时的一种多态可以通过虚函数来实现。具体一点的例子就是通过基类指针指向其子类的实例,然后来调用实际子类的成员函数。既然说到虚函数,那么虚函数表必然要提一下;我想用例子来加深一下对这方面原创 2011-09-27 22:04:24 · 1773 阅读 · 2 评论 -
Ice读书笔记--- TreadControl类的join与detach方法
在Ice中创建线程很简单,假设有一个名为ReaderThread的线程类,则可以这样创建线程: class ReaderThread : public IceUtil::Thread { virtual void run() {原创 2011-09-07 13:22:56 · 1761 阅读 · 0 评论 -
一道面试题--翻转英文句子中的单词顺序
例如,句子"I miss you now"转为"now you miss I"。思路是先将整个句子翻转过来,然后再将每一个单词重新翻转一次,便可以得出翻转单词顺序的效果。代码示例: void Reverse(char* pb , char* pe) //将某原创 2011-09-24 00:22:27 · 4415 阅读 · 12 评论 -
Ice读书笔记--中间件概念与Ice综述(一)
一。中间件 1.简介 简单来说,中间件就是一种独立的系统软件或者某种服务应用程序。中间件处在客户端与服务器端的操作系统之上,主要负责网络资源管理和网络通信。中间件是一类软件,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作;中间件是基原创 2011-08-28 10:49:50 · 2946 阅读 · 0 评论 -
【C/C++】C++ String类的实现
面试的时候被问及了String类的实现,结果没写好... 就当是重新复习一下吧。 下面的程序并没有把String类的所有成员方法实现,只参考教程写了大部分重要的成员函数。#include#includeusing namespace std;class String{ friend ostream& operator> (istream&,String&);//重载>>运算符public: String(const char* str=NULL);原创 2011-05-11 12:15:00 · 43718 阅读 · 13 评论