随笔分类 -  C++

摘要:1 // run in windows: std::system("pause") 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 using namespace std::placeholders; 9 10 template 11 using DeleteFunc =... 阅读全文
posted @ 2017-04-07 21:53 jz_cnblogs 阅读(347) 评论(0) 推荐(0) 编辑
摘要:swap函数是c++中一个常用的函数,用于交换两对象的值,此外还用于在重载赋值运算符中处理自赋值情况和进行异常安全性编程(见下篇),标准模板库中swap的典型实现如下: 缺省版本的Swap函数包含三次对象的复制:lhs复制到temp,rhs复制到lhs,temp复制到rhs。然而在一些情况下,这种复 阅读全文
posted @ 2016-04-15 21:27 jz_cnblogs 阅读(651) 评论(0) 推荐(0) 编辑
摘要:需要注意的地方: ①二叉搜索树删除一个指定结点R,若R为叶子结点,则将R的父结点中指向R的指针改为指向nullptr;若R的左右子结点一个为空,一个非空,则将R的父结点中指向R的指针改为指向R的非空子结点;若R有两个非空子结点,则找出R的右子树中的最小值结点,将其删除并将R的值置为该最小值结点的值。 阅读全文
posted @ 2016-03-29 17:02 jz_cnblogs 阅读(738) 评论(0) 推荐(0) 编辑
摘要:代码如下: 阅读全文
posted @ 2016-03-24 17:48 jz_cnblogs 阅读(556) 评论(0) 推荐(0) 编辑
摘要:要注意使用断言判断传入的字符串非空。 1 #include <cassert> 2 3 //求字符串长度 4 size_t StrLen(const char *str) 5 { 6 assert(str != nullptr); 7 size_t len = 0; 8 while (*str++ 阅读全文
posted @ 2016-03-11 21:37 jz_cnblogs 阅读(366) 评论(0) 推荐(0) 编辑
摘要:考虑下面一个二叉树的实现: 1 enum Operator {PLUS = 1, MINUS = 2, MULTIPLY = 3, DIVIDE = 4}; 2 3 class BinTreeNode 4 { 5 public: 6 virtual ~BinTreeNode() {}; 7 virt 阅读全文
posted @ 2016-03-01 23:40 jz_cnblogs 阅读(471) 评论(0) 推荐(0) 编辑
摘要:c++有时候需要为类的某个成员函数重载常量与非常量的版本,定义常量版本是为了保证该函数可作用于常量类对象上,并防止函数改动对象内容。但有时两个版本的函数仅仅是在返回的类型不同,而在返回前做了大量相同的工作,那么代码会有大量重复,由此也会带来编译时间和代码膨胀等开销。例如下面的类成员函数: 1 #in 阅读全文
posted @ 2016-02-29 23:52 jz_cnblogs 阅读(1020) 评论(0) 推荐(0) 编辑
摘要:接上篇:http://www.cnblogs.com/jzincnblogs/p/5217688.html,这篇主要记录编程过程中需要注意的地方以及遇到的一些问题及解决方法。 一、gethostbyname(),inet_ntoa()等函数已经过时 使用上面两个函数时编译器会报错并提示函数已经是过时 阅读全文
posted @ 2016-02-29 15:53 jz_cnblogs 阅读(5792) 评论(2) 推荐(0) 编辑
摘要:接上篇http://www.cnblogs.com/jzincnblogs/p/5213978.html,这篇主要记录编程方面的重点。 客户端使用了Windows Socket提供的API,支持上传、下载、删除、查看文件,断点续传,二进制/ASCII模式切换,被动模式切换,记录操作日志等功能。 代码 阅读全文
posted @ 2016-02-25 17:08 jz_cnblogs 阅读(7336) 评论(1) 推荐(0) 编辑
摘要:之前使用c++实现了一个FTP客户端,在这里做一些记录。 一、需要注意的几点 ①FTP是一种文件传输协议,基于TCP,所以客户端与服务器建立的连接是可靠、安全的,并且要经过三次握手的过程。 ②FTP传输数据默认采用二进制模式,即将文件内容转换为二进制表示后再传送,而若HTML等文本文件传输时需要转换 阅读全文
posted @ 2016-02-24 18:57 jz_cnblogs 阅读(16115) 评论(1) 推荐(2) 编辑
摘要:前面已经使用邮槽实现过进程间通信:http://www.cnblogs.com/jzincnblogs/p/5192654.html ,这里使用命名管道实现进程间通信。 与邮槽不同的是,命名管道在进程间传输数据是基于连接且可靠的传输方式,所以命名管道传输数据只能一对一。使用命名管道的步骤如下: ①创 阅读全文
posted @ 2016-02-16 15:03 jz_cnblogs 阅读(10130) 评论(0) 推荐(0) 编辑
摘要:Windows API提供了邮槽和命名管道两种机制来实现进程间通信,在这里使用C++实现邮槽。 邮槽是Windows提供的一种进程间单向通信的机制,进程中的一方只能读取(或写入)数据,而另一方只能写入(或读取)数据。这种进程间的通信可以发生在本地或者网络之中。而在使用邮槽之前,服务器端必须先创建邮槽 阅读全文
posted @ 2016-02-16 14:33 jz_cnblogs 阅读(2738) 评论(0) 推荐(0) 编辑
摘要:之前用c++实现过基于windows socket的单线程TCP服务器(http://www.cnblogs.com/jzincnblogs/p/5170230.html),今天实现了一个多线程的版本,可以接受多个客户端的请求,原理与之前的单线程版本相似,只是在多线程版本中主线程用于监测客户端请求, 阅读全文
posted @ 2016-02-14 21:54 jz_cnblogs 阅读(18105) 评论(5) 推荐(0) 编辑
摘要:线程同步是指同一进程中的多个线程互相协调工作从而达到一致性。之所以需要线程同步,是因为多个线程同时对一个数据对象进行修改操作时,可能会对数据造成破坏,下面是多个线程同时修改同一数据造成破坏的例子: 1 #include <thread> 2 #include <iostream> 3 4 void 阅读全文
posted @ 2016-02-13 16:38 jz_cnblogs 阅读(54089) 评论(1) 推荐(4) 编辑
摘要:今天使用c++实现了标准库头文件<numeric>中的accumulate函数的并行计算版本,代码如下,注释写的比较详细,仅对其中几点进行描述: ①该实现假定不发生任何异常,故没有对可能产生的异常进行处理 ②第42行的语句: const unsigned int num_thread = std:: 阅读全文
posted @ 2016-02-03 21:31 jz_cnblogs 阅读(1090) 评论(0) 推荐(0) 编辑
摘要:c++11开始支持多线程编程,相关的类和函数封装在标准库头文件<thread>中,而c++多线程编程很重要的一点就是当用户创建一个std::thread对象,关联了可调用对象后,需要在该thread对象销毁前调用join()或detach()。其中join()函数用于结合线程,确保在创建该threa 阅读全文
posted @ 2016-02-03 15:11 jz_cnblogs 阅读(1769) 评论(1) 推荐(0) 编辑
摘要:前天写了一个基于tcp协议的服务器客户端程序,今天写了一个基于UDP协议的,由于在上一篇使用TCP协议的服务器中注释已经较为详细,且许多api的调用是相同的,故不再另外注释。 使用UDP协议需要注意几点: ①UDP是面向无连接的,客户端在于服务器通信前无须建立连接,且UDP协议不保证发出的消息是否被 阅读全文
posted @ 2016-01-31 22:28 jz_cnblogs 阅读(1439) 评论(0) 推荐(0) 编辑
摘要:今天自己编写了一个简单的c++服务器客户端程序,注释较详细,在此做个笔记。 windows下socket编程的主要流程可概括如下:初始化ws2_32.dll动态库-->创建套接字-->绑定地址信息-->服务器进行监听/客户端连接服务器-->数据交换-->关闭套接字对象。 服务器端: 1 #inclu 阅读全文
posted @ 2016-01-29 22:30 jz_cnblogs 阅读(3798) 评论(2) 推荐(0) 编辑
摘要:今天用c++写了个数独程序,在编译过程中报了一个错误:1>------ 已启动生成: 项目: sudoku, 配置: Debug Win32 ------1> main.cpp1> function.cpp1>e:\program files (x86)\microsoft visual stu... 阅读全文
posted @ 2015-12-15 17:34 jz_cnblogs 阅读(25505) 评论(0) 推荐(0) 编辑
摘要:今天使用C++编写了一段小程序,练习使用标准库的算法,代码如下: 1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 #include <string> 5 6 using std::vector; 7 using s 阅读全文
posted @ 2015-11-25 16:00 jz_cnblogs 阅读(2129) 评论(1) 推荐(1) 编辑