C#/C++/C/.Net
文章平均质量分 73
OshynSong
百度云计算事业部研发工程师
展开
-
C++版ThreadPool实现
个人基于pthread实现的C++版ThreadPool,代码见github。原创 2017-07-17 22:54:06 · 1858 阅读 · 0 评论 -
线段树应用
问题描述: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. The update(i, val) function modifies nums by updating the element at index i to val.原创 2016-06-15 23:57:06 · 723 阅读 · 0 评论 -
C++对象的构造
C++中通过用户自定义类建立对象时,需要调用构造函数,这里包含默认构造函数、复制构造函数和自定义构造函数。其中自定义构造函数,按照函数重载机制进行匹配调用,与普通重载函数调用类似。因此,这里讨论的是默认构造函数和复制构造函数,因为这两种构造函数如果用户不显式定义,会在特定情况下被编译器合成出来。编译器合成的规则并不明显,C++标准做的说明只是“在需要的时候合成”。默认构造函数(default con原创 2016-05-31 23:39:26 · 1166 阅读 · 0 评论 -
“Rotate sorted array”系列问题
给定一个排序的数组,进行数组旋转之后引出了一系列的问题,这里将遇到的相关问题做一个总结,并给出解决方法,备用所需。有序数组旋转操作这个问题是所有系列问题的起始,给一个有序数组,使用这个操作进行旋转,得到的数组就可以以之为其他问题的基础进行引申。 Rotate an array of n elements to the right by k steps. For example, with原创 2016-05-05 23:46:23 · 489 阅读 · 0 评论 -
C++标准库——random
C++11引入了random头文件,可以更加得到更精确和功能更完善的随机数以及相关领域问题。这个标准库分为两大部分,分别是: - 生成器:定义了用来产生均匀分布的伪随机数的机制,也称为随机数引擎(engine)。 - 分布:以生成器得到的均匀分布的随机数序列转换为某种特定数学概率分布的序列,如均匀分布、正态分布、泊松分布等。生成器random_device这是标准库提供的一个非确定性随机数生成设原创 2016-05-28 19:31:03 · 14251 阅读 · 2 评论 -
C++对象内存模型
C语言中数据和处理数据的函数是分别定义,各个处理数据的函数实现相应各种算法。但是C++提供了类,可以实现较好的数据和处理数据的算法的封装性,这种封装性相比较C语言而言会带来一些成本,这主要受制于是C++对象为支持相应特性而实现的内存模型。 C++中分别有static和nonstatic两种数据成员,有static、nonstatic、virtual三种成员函数。对于一个类的对象的内存布局方式主要经原创 2016-05-12 20:12:42 · 4406 阅读 · 0 评论 -
函数对象与整形操作元函数
函数对象C++的STL大量算法实现中有许多需要进行运算的参数,如sort算法进行比较的方式、power进行运算的操作等。这些参数虽然可以使用一个函数指针的方式,将用户定义的特定操作以指针方式传入,但是函数指针不能满足抽象性的要求,而且无法与其他组件进行复杂的配接,因此诞生了函数对象。函数对象行为类似函数的一种对象,就实现来看,就是一个重载了函数运行操作符(operator())的类。 STL的函数原创 2016-04-28 14:15:02 · 702 阅读 · 0 评论 -
C++模版总结(2/2)
在上一篇博文http://blog.csdn.net/u010487568/article/details/50471592中对C++的模版相关点做了总结,主要包括对模版和泛型编程的理解,对模版的定义与实例化相关内容,本文针对模版更高阶的内容进行一个总结,包括模版编译、模版多功能性、模版特化等内容。模版编译编译器在看到模版定义时不产生代码,这与看到类定义不产生代码一样,只会在看到用模版产生类并使用了原创 2016-01-07 20:43:36 · 653 阅读 · 0 评论 -
Palindrome Linked-List
Given a singly linked list, determine if it is a palindrome.题目要求能在O(1)的空间和O(n)的时间内完成。基本思路如下: 1. 找到链表的中点元素,从中点元素开始reverse后半部分 2. 依次比较第一个和最后一个,并进行循环直到达到中点 3. 将后半部分再进行依次reverse恢复其中中点元素需要根据节点数是奇数还是偶数进行原创 2016-04-13 15:18:35 · 393 阅读 · 0 评论 -
House Robber 完整版
这是一个从简到繁的步进题目组。House Robber I第一个是一维很简单的线性状态转换,题目如下: You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping原创 2016-04-12 17:55:27 · 572 阅读 · 0 评论 -
LeetCode [Symmetric Tree]
题目: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).判断一棵二叉树是否是镜像的,主要思路是基于对当前节点的判断之后进行递归,对于非递归方式暂未实现。代码如下: bool isSymmetric(TreeNode* root) {原创 2016-04-06 17:15:08 · 363 阅读 · 0 评论 -
使用模版元编程实现C和C++中复杂类型声明的语义化
背景C和C++中提供的基本类型总共有13中,定义在limit头文件中。如下://整数类型boolchar | signed char | unsigned charshort | unsigned shortint | unsigned intlong | unsigned long//浮点类型floatdoublelong double除此之外,C++还定义了两种新的长整数类型:l原创 2016-03-30 22:27:09 · 695 阅读 · 1 评论 -
模版元编程之——Type Traits
元编程之中有两种元数据,一种是类型数据,这里的type traits就是对类型数据的操作或者称为计算。这种技术在STL的设计中使用的非常广泛。本质上是借用C++模版提供的模版形参推导和特化两种机制来实现的。迭代器迭代器是联系算法与容器的桥梁,二者彼此独立设计,都使用泛型方法实现。迭代器就是联系他们的胶着剂。以经典的交换函数swap来入手:这个函数是一个模版函数,接收两个迭代器模版参数,将他们所指之物原创 2016-03-29 22:54:00 · 637 阅读 · 1 评论 -
模版元初识
C++提供的模版语法,在语言层面上带来了巨大的灵活性,当然也无意中加深了C++学习的难度。模版特性的引入,得到发展的模版元编程,重新刷新了发明模版时对它的认识。1998年在德国的泛型编程研讨会上,Dave见到了使用C++模版实现的Lisp语言。以此为基础,发展了Boost元编程库:第一个设计用于将编译期C++从一个特别的“模版技巧”集合转变为正规的、易于理解的软件范例程序库。从最初的仅限于快速科学数原创 2016-03-28 21:47:38 · 443 阅读 · 0 评论 -
关于linux下时间延迟函数精度问题
Linux内核时钟中断设施linux的时钟中断需要两个全局变量,分别是xtime与jiffies。1、xtime一个timeval结构类型变量,是从cmos电路中取得的时间,一般是从某一历史时刻开始到现在的时间,也就是为了取得我们操作系统上显示的日期。这个就是“实时时钟”,它的精确度是微秒。获取方式是通过sys/time.h头文件里面的gettimeofday函数获取。2、HZLinux核心每隔固定原创 2016-07-27 10:31:51 · 8495 阅读 · 0 评论 -
C++11特性维基百科总结
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百科不是知道是台湾还是香港人翻译的然后由工具转换成简体中文的,有些术语和语言习惯和大陆程序不一样! 我决定结合这两个版本按照我自己的习惯把这篇文章整理到我的博客中.分享给关注我和关注C++11的朋友们.转载 2017-02-24 11:19:28 · 1080 阅读 · 0 评论 -
模版元编程:C++11中type traits的部分实现
C++11新加入的type_traits头文件提供了模版元编程中常用的type trait基础设施,这些type traits基于编译期间的运算,能够极早提示出程序中的错误。这些type traits的基础就是整形包装器,见之前的博文总结:http://blog.csdn.net/u010487568/article/details/51273920。本文对type traits的部分进行总结和实现原创 2016-12-26 23:32:26 · 1813 阅读 · 0 评论 -
g++编译选项
介绍代码编译过程分为:预处理,生成.i文件编译,转换成汇编语言, 生成.s文件将汇编代码转换成机器码,生成.o文件链接目标代码,生成可执行程序总体选项-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.gcc -E hello.c > pianoapan.txt gcc -E hello.c | more 1212慢慢转载 2016-12-19 15:36:58 · 741 阅读 · 0 评论 -
C++11类的新语法和特性
sizeof计算类成员大小sizeof可以直接用于获取Class::member的大小,而不用通过Class的实例获取。class A { public: long long llint = 0;};cout << sizeof(A::llint) << endl;上原创 2016-11-28 16:50:03 · 478 阅读 · 0 评论 -
C++11模版新特性
模板友元C++11新标准中,可以声明一个类的模板参数类型为类的友元。template<typename T> class Bar{friend T;protected: int val = 100;};class Foo{public: void print_bar(Bar<Foo> &bar) {std::cout<<"bar:\t"<<bar.val<<std::en原创 2016-11-22 21:43:28 · 492 阅读 · 0 评论 -
C++11新增语法(糖)
新增类型long longC++11标准中新加入了long long类型属性,占用空间不小于long类型。long large = LONG_MAX;long long long_large = LLONG_MAX;long long long_long_large = 1LL << 63;cout<<"test long long:"<<large<<'\t'<<long_large<<'\原创 2016-11-23 23:51:01 · 1132 阅读 · 0 评论 -
C++11 强类型enum
旧式enum问题容易被隐式转换成int默认情况下enum的每一项都有一个整数对应,可以显式指定或者从前一个自增得到。 旧式enum的类型限制是:禁止不同枚举体之间的赋值 禁止整形向枚举体的隐式转换等但是,当使用enum作为函数参数或者返回值时,如果此时参数类型或者返回值类型为int类型,是都可以隐式转换为int类型的。无法指定底层所使用的数据类型对于enum底层的实现,也就是underlyi原创 2016-12-14 18:40:36 · 805 阅读 · 0 评论 -
http4cpp - 易用的C++ http开发微框架
根据最近基于C++开发http应用的经历,积累了一个基于libcurl库的微型开发框架,源码见github。原创 2016-11-15 14:56:11 · 1182 阅读 · 0 评论 -
libcurl库(C++)快速使用
简介libcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP这些协议,同时支持使用SSL原创 2016-10-28 17:44:26 · 13325 阅读 · 0 评论 -
自行编写的Makefile文件的结构
对于文件较多的C++项目,目录结构的组织清晰能方便开发,多个文件夹存放了多个源文件和头文件,一般下方式在编译之后都会生成与源文件同目录下的目标文件,个人觉得这种方式不太好,各个目标文件分散不太集中,希望所有目标文件和可执行文件都放在bin目录下,具体目录结构如下:--bin |--a.o |--b.o |--... |--module1 | |--ma1.o | |--m原创 2016-09-08 21:54:59 · 523 阅读 · 0 评论 -
一个输出内容不同引发的问题
常用的curl、mysql命令行客户端等程序,进行操作后会进行输出,这都是很正常的程序交互,并没有什么问题。但是,在使用他们的过程中,出现了下面这样的问题: curl 下载一个文件的命令后续没有任何其他管道符操作时,会默认讲文件输出到命令行,但是添加管道符进行后续操作时,就会输出下载文件的进度统计信息,文件内容则不会输出首先直接下载,输出全部文件内容:$ curl https://www.ba原创 2016-08-13 02:03:12 · 565 阅读 · 0 评论 -
C++11的Lambda表达式
随着函数式编程语言的应用,很多语言都提供了 lambda 表达式,如 C#,Python,Java 8。lambda 表达式可以方便地构造匿名函数,如果代码里面存在大量的小函数,而这些函数一般只被调用一次,那么将他们重构成 lambda 表达式。C++11新标准里添加了lambda表达式这个语言特性,有着自己特定的格式和要求。C++11 lambda格式lambda表达式的通用格式如下:[captu原创 2016-06-23 00:05:07 · 428 阅读 · 0 评论 -
线程本地存储
对于多线程程序,所有线程共享全局和静态变量,任何线程使用变量之后都会在其他线程可见,因此对于执行顺序非常重要的场景,需要使用多重方式来进行同步确保线程安全。但是,如果希望每个线程单独拥有一个全局或静态变量,所有线程都可以使用它,但是在每个线程中是单独存储的,那么就需要使用线程本地存储。pthread库的实现经典的pthread线程库提供了对线程本地存储的完全支持,具体需要使用如下三个函数://将需要原创 2016-07-05 21:13:46 · 892 阅读 · 0 评论 -
C++11标准库chrono
chrono是C++11新加入的方便时间日期操作的标准库,它既是相应的头文件名称,也是std命名空间下的一个子命名空间,所有时间日期相关定义均在std::chrono命名空间下。通过这个新的标准库,可以非常方便进行时间日期相关操作。 chrono库主要包含了三种类型:duration, time_point 和 clock。Duration(时间间隔)chrono库中用一个duration模板类,原创 2016-01-13 19:35:36 · 2837 阅读 · 0 评论 -
C++标准库——时间相关
1. time.h和ctime功能:提供了跨平台支持的时间处理函数,满足了一半通用的时间处理相关操作。1.time.hC语言中的原生支持的跨平台时间和日期处理函数以及类型定义。之所以强调快平台,就是因为这些函数和类型定义的通用性。 类型定义:typedef long time_t; //定义了当前时间和日期到1970年1月1日的秒数typedef long clock_t; //时钟的滴答原创 2015-12-08 11:36:40 · 858 阅读 · 0 评论 -
C++模版总结(1/2)
STL是C++中泛型编程(GP)的经典,而语言支持的模版语法是进行泛型编程的基础。泛型编程是C++实现编译时多态性的一种最重要的方式。这里对C++语言的模版相关点进行一个总结,作为对深入理解泛型编程思想的基础。所谓模版(template)是一种蓝图或者公式,用来创建类或者函数。从抽象层次上看 - 类是对现实世界中同一类别有相同或相似特点的真实对象的一种抽象,定义相关数据成员,提供相关操作接口,通过原创 2016-01-06 20:42:30 · 808 阅读 · 1 评论 -
字节数组与字符串(字符数组)的转换操作
1、默认编码方式转换:(1)string(char[])转换为byte[]byte[] byteArr = System.Text.Encoding.Default.GetBytes(char[]);byte[] byteArr = System.Text.Encoding.Default.GetBytes(string);byte[] byteArr = System.Text.En原创 2014-09-17 01:02:45 · 4647 阅读 · 1 评论 -
C#多线程(四)
一、基于事件的异步模型(Event-Based Asynchronous EBA)EAP提供了一个简单的方式来使用多线程编程,提供了多线程能力的同时而不用显式的打开或者管理线程。同时提供了一个取消模型,可以安全的更新WPF和WindowsFormsControl的属性。EAP只是一个模型,这些特性必须要采用实际的代码来实现。在.NET Framework中最明显的就是Backgroun原创 2014-04-02 20:46:50 · 1128 阅读 · 0 评论 -
C# BackgroundWorker的使用
BackgroundWorker 类在单独的线程上执行操作。命名空间:System.ComponentModel程序集:System(在 system.dll 中)public class BackgroundWorker : Component备注:BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在转载 2014-04-02 21:14:32 · 1294 阅读 · 0 评论 -
C#多线程(三)
一、线程同步概述在多线程程序中,当存在共享变量和抢占资源的情况时,需要使用线程同步机制来防止发生这些冲突,这样才能保证得到可预见的结果,也就是线程安全的。否则就会出现不可预知的结果产生线程不安全问题。特别是在访问同一个数据的时候最为明显。主要通过以下四个方式进行:简单阻塞:让一个线程等待另一个线程执行结束或者等待一段时间而阻塞执行,使用Sleep、Join、Task.Wait这几个原创 2014-03-27 21:51:32 · 1455 阅读 · 0 评论 -
C#多线程(二)
一、线程池每次创建一个线程,都会花费几百微秒级别的时间来创建一个私有的局部栈,每个线程默认使用1M的内存。这个可以在使用Thread类的构造函数时设置:new Thread(new ThreadStart(Go), 2);new Thread(new ParameterizedThreadStart(Go("hello")), 3);提供的两种构造函数方式都提供了对应的设置线程局部栈的大原创 2014-03-27 17:15:39 · 1659 阅读 · 0 评论 -
C#多线程(一)
一、定义与理解1、定义线程是操作系统分配CPU时间片的基本单位,每个运行的引用程序为一个进程,这个进程可以包含一个或多个线程。线程是进程中的执行流程,每个线程可以得到一小段程序的执行时间,在单核处理器中,由于切换线程速度很快因此感觉像是线程同时允许,其实任意时刻都只有一个线程运行,但是在多核处理器中,可以实现混合时间片和真实的并发执行。但是由于操作系统自己的服务或者其他应用程序执行,也原创 2014-03-27 15:29:19 · 1909 阅读 · 0 评论 -
C#正则表达式Regex类使用
作为文本处理的利器——Perl语言对正则表达式的最强大支持起到了重要的作用,正因为如此,许多其他语言在加入正则表达式引擎的时候都会或多或少的兼顾perl风格的正则表达式,开发出相应的引擎。本人使用perl语言处理文本有一些时间,同时也有几年php开发的经历,像php就有兼容perl的正则表达式引擎,其对应的正则表达式函数就是以p为前缀,如preg_replace、preg_match、preg_s原创 2014-01-15 23:14:51 · 2672 阅读 · 0 评论 -
HtmlAgilityPack使用——XPath注意事项
在使用HtmlAgilityPack这个开源的类库进行网页内容解析的时候是非常的方便(使用方法见另一篇博客《HTML解析:基于XPath的C#类库HtmlAgiliytyPack》),其基于XPath路径语法进行高效的选择文档节点,当发起请求获取了网页html文件的时候,解析的大部分工作量就落到了XPath路径表达式的书写了。本文测试在VS2010开发环境,.NetFramework 4.0原创 2014-01-14 23:31:01 · 9007 阅读 · 1 评论 -
C#判断字符是否为中文方法总结
字符存储结构实际存储的就是字节代码,汉字的unicode编码之后,使用unicode编码存储之后可以对每个字节的字节码进行比较,从而可以按照编码的结构来判断是否是汉字,特殊字符。判断是否是汉字或者是其他某种文字,都是按照这个原理实现。对于C#语言来说,判断方法总结起来有如下三种。1.直接使用Unicode编码比较中文汉字的unicode编码范围为4e00到9fee,代码如下:原创 2014-01-15 00:58:51 · 4056 阅读 · 0 评论