C/C++
文章平均质量分 77
messiran10
这个作者很懒,什么都没留下…
展开
-
c/c++ union的用法
联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!1、什么是联合?“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该转载 2016-05-25 10:57:23 · 500 阅读 · 0 评论 -
Python-subprocess
这里的内容以Linux进程基础和Linux文本流为基础。subprocess包主要功能是执行外部的命令和程序。比如说,我需要使用wget下载文件。我在Python中调用wget程序。从这个意义上来说,subprocess的功能与shell类似。 subprocess以及常用的封装函数当我们运行python的时候,我们都是在创建并运行一个进程。正如我们在Linux进程基础中介转载 2016-08-08 09:44:32 · 401 阅读 · 0 评论 -
【Leetcode】之Binary Tree Level Order Traversal
一.问题描述Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).For example:Given binary tree [3,9,20,null,null,15,7], 3原创 2016-08-05 23:21:28 · 265 阅读 · 0 评论 -
【Leetcode】之Symmetric Tree
一.问题描述Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1 / \ 2 2 / \ / \原创 2016-08-05 22:52:15 · 275 阅读 · 0 评论 -
【Leetcode】之Validate Binary Search Tree
一.问题描述Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the n原创 2016-08-04 23:50:36 · 289 阅读 · 0 评论 -
【Leetcode】之Gray Code
一.问题描述The gray code is a binary numeral system where two successive values differ in only one bit.Given a non-negative integer n representing the total number of bits in the code, print the原创 2016-07-21 23:05:39 · 336 阅读 · 0 评论 -
排序算法小结
排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。 我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆。比如下面这张图,我们将围绕这张图来思考几个问题。 上面的这张图来自一个PPT。它概括了数据结构中的所有常见转载 2016-07-30 20:32:03 · 272 阅读 · 0 评论 -
冒泡排序最好的情况下复杂度O(N)的原因
我在许多书本上看到冒泡排序的最佳时间复杂度是O(n),即是在序列本来就是正序的情况下。但我一直不明白这是怎么算出来的,因此通过阅读《算法导论-第2版》的2.2节,使用对插入排序最佳时间复杂度推算的方法,来计算冒泡排序的复杂度。1. 《算法导论》2.2中对插入排序最佳时间复杂度的推算 在最好情况下,6和7总不被执行,5每次只被执行1次。因此, 时间复杂度为O(n)转载 2016-07-30 20:29:50 · 1792 阅读 · 0 评论 -
std::map的机制
转自 http://blog.csdn.net/solstice/article/details/8521946陈硕 (chenshuo.com)2013-01-20std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能,还规定转载 2016-07-30 14:01:46 · 8601 阅读 · 0 评论 -
linux下使用FIFO进行进程间通信
无名管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,转载 2016-09-11 11:06:20 · 2561 阅读 · 0 评论 -
C++中Operator类型强制转换成员函数
类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下: class { public: operator ();转载 2016-08-31 09:29:01 · 933 阅读 · 0 评论 -
c/c++ 各个类型所占的字节数
我用VC编译的,测试了一下,代码如下:#include "iostream"using namespace std;int main(){coutcoutcoutcoutcoutcoutreturn 0;}结果为:124448由此看出,32位系统,vc编译转载 2016-09-19 22:11:38 · 934 阅读 · 0 评论 -
c++模板的定义和实现为啥分开
http://www.gois.ws/showfile.asp?id=460:0:0如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 PM 发表人: Nemanja Trifunovic前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WT转载 2016-09-06 10:20:15 · 939 阅读 · 0 评论 -
STL与拷贝构造函数
所有容器提供的都是“value语意”而非“reference语意”。容器内进行元素的安插操作时,内部实施的是拷贝操作,置于容器内。因此STL容器的每一个元素都必须能够拷贝。---> 侯捷、孟岩译 p144页原文 以vector为例,往Vector中(实际上所有STL容器都是这样)放元素,Vector会调用元素类的拷贝构造函数生成的副本,当Vector走出生存期时(),会自动调用其中每个元素转载 2016-08-25 15:26:00 · 441 阅读 · 0 评论 -
C++之string
通过在网站上的资料搜集,得到了很多关于string类用法的文档,通过对这些资料的整理和加入一些自己的代码,就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了!下面先罗列出string类的函数有哪一些,然后再罗列出函数的原型,最后到代码的实现标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖转载 2016-08-24 16:39:03 · 391 阅读 · 0 评论 -
effective c++条款4-确定对象在使用前被初始化
1. 内置类型C++中的内置基本类型,比如int,double,float等,初值都是垃圾值,即声明int i,i的初值是一个垃圾值。本书建议的最佳处理方法是:永远在使用对象之前将之初始化。比如:1 int x = 0;2 3 const char* test = “hello world”;4 5 double d; cin >> d;2. STLC+转载 2016-08-23 09:46:53 · 340 阅读 · 0 评论 -
为什么auto_ptr不可以用作stl容器的元素
上个星期的博客shared_ptr源码剖析里其实遗漏了一个问题:为什么auto_ptr不可以作为STL标准容器的元素,而shared_ptr可以? 我在网上看了好多篇讲shared_ptr的文章里讲到了这个问题,不过大多文章只是简单两笔带过。我研究了一下这个问题,发现还是有挺多有价值的内容,所以把这个问题单独成一篇博客和大家分享。先从表象上看看这个问题,假如有这样的一段代码,是否能够运行?转载 2016-08-21 21:59:40 · 1637 阅读 · 0 评论 -
scoper_ptr与auto_ptr
boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用:#include #include #include class implementation{public: ~implementation() { std::cout转载 2016-08-21 21:56:00 · 375 阅读 · 0 评论 -
C++中的前向声明
前向声明:可以声明一个类而不定义它。这个声明,有时候被称为前向声明(forward declaration)。在声明之后,定义之前,类Screen是一个不完全类型(incompete type),即已知Screen是一个类型,但不知道包含哪些成员。不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类转载 2016-08-21 21:44:03 · 286 阅读 · 0 评论 -
C++模板的特化与偏特化
1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL在C++社区中得到了广泛的关注、应用和研究。理解和掌握模板是学习、应用和研究以及扩充STL的基础。而STL模板实例中又充斥着大量的模板特化和偏特化。2.模板的定义(1) 类模板定义一个栈的类模板,它可以用来容纳不同的数据类型转载 2016-07-30 09:45:11 · 2754 阅读 · 1 评论 -
【Leetcode】之二叉树的非递归遍历
二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对转载 2016-07-28 22:09:36 · 281 阅读 · 0 评论 -
C++类与内存分配
一个类,有成员变量:静态与非静态之分;而成员函数有三种:静态的、非静态的、虚的。那么这些个东西在内存中到底是如何分配的呢?以一个例子来说明:12345678910111213141516171819转载 2016-06-13 17:28:31 · 453 阅读 · 0 评论 -
C++各种继承方式的可见性
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生转载 2016-07-10 17:05:35 · 1426 阅读 · 0 评论 -
C++的类型转换
首先回顾一下C++类型转换:C++类型转换分为:隐式类型转换和显式类型转换第1部分. 隐式类型转换又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3;double dval = 3.14159;iva转载 2016-07-10 16:07:03 · 540 阅读 · 0 评论 -
STL中的list
最近在细看《STL源码剖析》,看到list的源码的时候,一开始是有疑问的。list的迭代器设计是满足traits编程技法的,list的迭代器具体实现如下:templatestruct __list_iterator { typedef __list_iterator iterator; typedef __list_iterator const_itera原创 2016-06-03 11:11:22 · 359 阅读 · 0 评论 -
C++中的const用法
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2016-06-01 10:13:43 · 331 阅读 · 0 评论 -
【Leetcode】之Add Binary
一.问题描述Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".二.我的解题思路这道题也比较容易,直接按照规则计算即可。测试通过的程序如下:class Solution {public:原创 2016-05-31 12:22:18 · 353 阅读 · 0 评论 -
traits编程技法
最近在学习《STL源码剖析》,对书中介绍的traits很有感。自己在写一下,加深自己的理解。举例:加入我们现在有一个算法,可以对传入的迭代器前进N步。template void move_n_step(ITERATOR &itor, int n){ for (int i = 0; i < n; i++) itor++;}代码很了然,然原创 2016-05-17 09:38:14 · 2301 阅读 · 1 评论 -
C语言中的static
google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大。所以,我这篇博文博采众家之长,把互联网上的资料整合归类,并亲手编写程序验证之。 C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,转载 2016-04-21 11:06:23 · 345 阅读 · 0 评论 -
C++继承
简单地说下C++类的3种继承方式,分别是public继承,protected继承,private继承。最常用的还是public继承。class默认的是private继承,它的member如果没写权限也是默认private。struct则相反,默认的是public继承。结合下面的图示和代码,对C++的继承就有了比较清晰的认识了。继承之后,derived cla转载 2016-06-14 10:17:38 · 280 阅读 · 0 评论 -
C++中的new与delete
最近一直在啃 C++ Primer 中文版第4版,发现 C++中new和delete应用遍布全书,现对其使用作简单总结。在C++中,可以使用new和delete动态创建和释放数组或者单个对象,现在对它们的使用一一道来。1.创建动态数组 数组类型的变量有三个重要的限制:数组长度固定不变,在编译时必须知道它的长度,数组只在定义它的块语句中存在。对C++中关转载 2016-06-14 11:04:28 · 388 阅读 · 0 评论 -
【Leetcode】之Remove Duplicates from Sorted List II
一.问题描述Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.For example,Given 1->2->3->3->4->4->5, return 1->2->5.原创 2016-07-18 23:42:12 · 214 阅读 · 0 评论 -
C++中的friend class
对于一个没有定义public访问权限的类,能够让其他的类操作它的私有成员往往是有用的。例如你写了一段binary tree的代码,Node是节点类,如果能够让连接多个节点的函数不需要调用public方法就能够访问到Node的私有成员的话,一定是很方便的。Friend Classes(友元类)C++中的friend关键字其实做这样的事情:在一个类中指明其他的类(或者)函数能够直接访问该类转载 2016-07-06 14:15:52 · 7415 阅读 · 0 评论 -
C++中explicit关键字的使用
explicit用来防止由构造函数定义的隐式转换。 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。例如: class things{ public: things(const std::string&name =""): m_name(name),转载 2016-07-02 17:12:28 · 936 阅读 · 0 评论 -
C++中的RAII用法
C++中的RAII全称是“Resource acquisition is initialization”,直译为“资源获取就是初始化”。但是这翻译并没有显示出这个惯用法的真正内涵。RAII的好处在于它提供了一种资源自动管理的方式,当产生异常、回滚等现象时,RAII可以正确地释放掉资源。举个常见的例子:[cpp] view plain copy转载 2016-06-16 14:55:38 · 1111 阅读 · 0 评论 -
【Leetcode】之Search a 2D Matrix
一.问题描述Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:Integers in each row are sorted from left to right.The first int原创 2016-06-15 10:56:37 · 246 阅读 · 0 评论 -
C++中的const
C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。1.const 修饰成员变量 1 #include 2 using namespace std; 3 int main(){ 4 int a1=3; ///non-co转载 2016-06-15 10:32:16 · 209 阅读 · 0 评论 -
C++的重写,重载与充定义
阅读《Effective C++》条款33的时候产生了疑惑,在重写与重定义上有所混淆。现将网上查阅的资料记录如下:重写(override)首先,重写是指派生类的方法覆盖基类的方法,要求方法名、方法的参数都相同。重写是C++中实现多态这个特性基础。重写又称为覆盖,是指派生类函数覆盖基类函数,与重定义不同,重写要求被重写的基类函数为虚函数。 例如下面的代码:class Ba转载 2016-07-11 21:13:31 · 1140 阅读 · 0 评论 -
Vim入门
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。——————————正文开始——————————你想以最快的速度学习人类转载 2016-07-11 19:52:36 · 340 阅读 · 0 评论 -
STL的sort算法
详细解说 STL 排序(Sort)0 前言: STL,为什么你必须掌握1 STL提供的Sort 算法1.1 所有sort算法介绍1.2 sort 中的比较函数1.3 sort 的稳定性1.4 全排序1.5 局部排序1.6 nth_element 指定元素排序1.7 partition 和stable_partition2 Sort 和容器3 选择合适的排序函数4 小结5 参考文转载 2016-09-07 10:06:42 · 402 阅读 · 0 评论