自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (2)
  • 收藏
  • 关注

转载 浮点数的二进制表示

1、 前几天,我在读一本C语言教材,有一道例题#include <stdio.h>int main(int argc, char const *argv[]) { int num = 9; float* p = (float*)&num; printf("num value: %d\n", num); printf("*p value: %f\n", *p);

2017-04-17 22:38:11 763

原创 C++11——移动语义

一般我们传递的右值都是临时变量,所以可以随意修改、如果我们知道函数的某个参数是一个右值,就可以将其作为一个临时存储或获取其中的内容,而不会影响程序的正确性。这也就意味着,比起拷贝右值参数的内容,再使用,不如直接使用该右值内容。当动态数组比较大的时候,这样可以节省很多内存分配,提供更多的优化空间。试想,一个函数以vector作为一个参数,就需要将其拷贝进来,而不对原始数据做任何操作。在C++03/98

2017-04-11 13:03:58 591

原创 C++11——右值引用

C++中的引用允许你为以及存在的对象创建一个新的名字。对新引用所做的访问和修改操作,都会影响到它的原型(被引用的对象)。 例如:int var = 2;int& ref = var;ref = 9;// ref = 9;// var = 9;这种方式被称为左值引用——对左值的引用。左值这个概念来源与C语言,指的是可以放在赋值表达式左边的事物——在栈上或堆上分配的命名对象,或者其它有明确的内

2017-04-11 12:22:28 484

原创 DNS的基本原理

一、DNS是什么DNS(Domain Name System——域名系统)的作用非常简单,就是根据提供的域名,来查询相应的IP地址。这个系统的目的也很简单,避免人们去记忆数字形式的IP地址,因为字母比数字要容易记些。就好像你的电话簿,你不可能记住里面所有的电话号码,但你可以很容易的知道一个人的名字。二、查询过程DNS的作用虽然简单,但是它的查询过程却比看起来的要复杂得多,分为好几个步骤。在linux

2017-04-08 21:16:11 4383 1

原创 SCTP编译运行错误及解决

在学习使用SCTP之前,你要确定操作系统是否安装了SCTP协议的相关库文件。我使用的是Ubuntu,安装方法如下:sudo apt-get install libsctp-dev lksctp-tools当你安装成功后,可以用如下代码来测试SCTP服务器,这是一个简单的回射服务:sctp_darn -H 0 -P 2500 -l然后打开另一个终端,输入下面的代码来启动一个客户端:sctp_darn

2017-04-07 14:11:56 1821

原创 find命令

简介find命令用于在指定的目录层次结构中搜索指定的文件。它的功能多样且强大,也因此导致它的相关命令较多,学习起来相对较难。 1、命令格式find [选项] [搜索范围] [搜索条件] [操作]2、搜索条件 find的搜索条件有很多,这里介绍一些常用的。 1)、根据文件名查找 -name pattern:根据文件名进行查找(精确查找,区分大小写,只有与所给文件名完全相同的文件才会被列出),假

2017-04-04 14:36:34 909

原创 Ubuntu 16.04安装后的配置和美化

主题美化1、个人喜欢Ubuntu上的一款类Mac主题,安装方法自己百度。效果图如下: 2、终端 首先安装zsh,你可以通过“zsh -v”来查看自己是否已经安装sudo apt-get updatesudo apt-get install zsh安装完成后,到github上下载oh-my-zsh,它使得对zsh的配置变得简单的多。链接,你可以直接使用下面的命令进行下载安装:sh -c "$(c

2017-03-27 14:09:07 631

原创 字节序

简介字节序分为两种,大端字节序和小端字节序。它们是多字节数据在内存中存储的两种方式,大端字节序:将高序字节存储在起始地址(低地址);小端字节序:将低序字节存储在起始地址。可以通过下面这个程序来查看主机字节序。int main(int argc, char *argv[]){ union { short n; char c[sizeof(short)];

2017-03-26 10:20:48 632

原创 套接字地址结构

简介大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义它自己的套接字地址结构。这些结构的名字均以“sockaddr_”开头,并以对应每个协议族的唯一后缀结尾。IPv4套接字地址结构IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中。它的定义如下:struct in_addr { in_

2017-03-25 16:14:02 2742

原创 Ubuntu 搜狗输入法无法输入中文

今天不知怎么的,搜狗输入法没法输入中文了。具体表现是,输入时不会显示候选词列表,但是可以显示搜狗输入法的界面。试了很久最后解决的办法时,删除搜狗输入发的配置文件。它们在当前用户家目录下./config里的三个文件夹中:SogouPY、SogouPY.users、sogou-qimpanel删除这三个文件夹,然后重新登入系统就可以了。

2017-03-25 01:02:26 703

原创 Shell:重复执行一个命令n次

方法一for i in {1..10}; do echo "Hello, World"; done方法二 在~/.bashrc文件中创建一个run函数(函数名字随意):function run() { number=$1 shift for n in $(seq $number); do $@ done}使./bashrc生效souce ~/./bas

2017-03-23 21:06:50 36316 4

原创 Unix Network Programming——unp.h

在Unix网路编程第一卷第三版第一章的第一个例子中,包含了unp.h头文件。这个头文件并不在标准库中,你可以通过下载该书的附属代码来使用它。点击这里下载,你也可以在图灵社区中进行下载。 下载后需要进行编译,步骤如下: 1、解压 2、修改configure的权限,并执行再使用make进行编译chmod u+x configure./configuremake3、将生成的libunp.a文件复

2017-03-22 21:13:53 595

转载 关于unix下实际用户ID、有效用户ID、设置用户ID、文件所有者ID的一点理解

实际用户ID:有的文章中将其称为真实用户ID,这个ID就是我们登陆unix系统时的身份ID。 有效用户ID:定义了操作者的权限。有效用户ID是进程的属性,决定了该进程对文件的访问权限。文件的访问权限包括读写和执行。判断某个进程对文件有何权限时,内核会将非超级用户进程的有效ID与文件的所有者ID进行比较,当然,也可能需要比较有效组ID,这关系到具体的权限测试方法,先不在这里说明。而超级用户创建的进程

2017-03-22 19:24:44 401

翻译 CMake Tutorial(7)——Adding Support for a Dashboard

让你的工程支持将测试结果提交到dashboard的方法很简单。我们在前面已经定义了一些测试数据。我只需要运行这些提示,并将他们提交到dashboard上就可以了。为了让工程支持该功能,需要在顶层CMakeLists.txt文件中加入以下内容:# enable dashboard scriptinginclude (CTest)我们还需要创建一个CTestConfig.cmake文件用于在dashb

2017-03-22 19:23:27 402

翻译 CMake Tutorial(6)——Building an Installer

现在你的程序以及基本完成了,你希望将你的程序分享给不同的人使用。我们希望能够为不同的平台提供二进制程序和源分发。这和之前第三节所提到的install有些不同,在这一节我们希望安装已经构建好的源程序。在这个例子中,我们将构建支持二进制安装和包管理的安装包,如cygwin, debian, RPMs等。因此我们需要在使用CPack来创建与平台相关的安装程序。我们需要在工程顶层目录的MakeLists.t

2017-03-20 20:32:33 494 1

翻译 CMake Tutorial(5)——Adding a Generated File and Generator

这一节,我将向你展示如何将一个生成的源文件添加至应用程序的构建过程中。在本次示例,我们会创建一个预计算数值平方根的表(文本文件),将其作为构建过程的一部分,然后将这个表编译到你的应用程序中。为了实现该功能,我需要一个用于生成该表的程序,我们在MathFunctions目录中创建一个MakeTable.cxx文件内容如下:这里写代码片// A simple program that builds a

2017-03-20 20:03:49 373

翻译 CMake Tutorial(4)——Adding System Introspection

接下来,我们来考虑向工程中加入一些代码,取决于目标平台可能没有提供的功能。我们接着以前的例子,现在我们来添加一些代码用于判断目标平台是否提供了log()和exp()这两个函数。当然绝大多数的平台都提供了这两个函数,在这里只是为了演示如何来判断目标平台是否有我所需要的函数。如果目标平台有log()函数,我们就在mysqrt函数中调用它计算平方根。现在我们在工程顶层目录的CMakeLists.txt文件

2017-03-20 15:08:30 442

翻译 CMake Tutorial(3)——Installing and Testing

现在来为我们的工程添加安装和测试的功能。安装的规则很简单也很直接。对于MathFunctions库,我们可以通过在MathFunctions文件夹下的文件CMakeLists.txt中加入一下两行来完成对它的进行安装设置:# add installinstall (TARGETS MathFunctions DESTINATION bin)install (FILES MathFunctions

2017-03-19 12:07:25 502

翻译 CMake Tutorial(2)——Adding a Library

现在我们来看看怎么为你的工程添加一个库。这个库中包含我们自己实现的用于计算一个数值的平方根的功能。程序可以使用这个库,而不是去使用编译器提供的标准函数。在这次教程中,我们将这个库放入名为“MathFunctions”的文件夹。其中包含两个文件,内容如下:// MathFunctions.hdouble mysqrt(double x);// mysqrt.cxxinclude "MathFunc

2017-03-18 20:53:50 319

原创 C++重载练习

#include <iostream>using namespace std;class Point{public: explicit Point(int x = 0, int y = 0) : x(x), y(y) {} Point(Point &p) { this->x = p.getX(); this->y

2017-03-18 15:29:55 290

翻译 CMake Tutorial (1)——A Basic Starting Point

最基础的程序项目是通过对源码文件的构建产生可执行文件。对于简单的工程,你只需要在CMakeLists.txt文件中写入几行文本就足够了。这将是学习CMake的起点,CMakeLists.txt的文件内容与下面类似:cmake_minimum_required (VERSION 2.6)project (Tutorial)add_executable (Tutorial tutorial.cxx)

2017-03-18 14:41:41 350

原创 运行时类型识别

前言我们知道,在类的继承中可以通过基类的指针(或引用)指向派生类的对象,利用多态性执行派生类中提供的功能。但这仅限与调用基类中声明的虚函数。如果希望对于一部分派生类的对象,调用派生类中引入的新函数,则无法通过基类指针进行。我们可以通过static_cast,将基类指针转换成派生类指针。但这样做并不安全,只能在指针所指向的对象类型明确的情况下执行。而有时只有在运行时才能知道指针所指对象的实际类型是声明

2017-03-17 16:46:35 697 1

转载 Linux虚拟内存

前言在过去,传统的计算机在运行程序时,都是一次性将程序所需的所有数据调入内存(物理内存)中。这样的行为总是会耗尽内存的,从而导致其它程序在一定时间内无法调入内存(物理内存)。于是在1968年,Denning.P就曾提出,“程序执行时呈现除局部性特征,即在一个较短的时间内,程序的执行仅局限于某个部分,而它所访问的存储空间也局限在某个区域中”。简单点讲就是程序在运行时,在较短时间内,并不需要全部的数据和

2017-03-14 14:30:26 376

原创 虚析构函数

虚析构函数在C++中不能声明虚构造函数,但是可以声明虚析构函数。析构函数没有类型,也没有参数,和普通的函数成员相比,虚析构函数的情况略为简单些。 虚析构函数的声明语法为:virtual ~类名();如果一个类的析构函数是虚函数,那么由它派生的所有子类的析构函数也是虚函数。析构函数声明为虚函数后,在使用指针或引用时可以动态绑定,实现运行时的多台,保证使用基类类型的指针就能调用适当的析构函数针对不同的

2017-03-13 20:11:39 599

原创 虚函数

虚函数介绍

2017-03-13 19:46:51 291

原创 Makefile的简单介绍

Makefile 介绍Makefile文件的作用是告诉make工具需要如何去编译和链接程序,在需要编译工程时只需要一个make命令即可,避免了每次编译都要重新输入完整命令的麻烦,大大提高了效率,也减少了出错率。make命令的规则是: - 如果这个工程没有编译过,则把所有的源文件进行编译链接 - 如果工程已经编译过,但是之后修改了其中的几个.c文件,那么只需要编译那些被修改的文件,并链接目标程

2017-03-12 19:33:51 433

转载 C++迭代器iterator

1、迭代器(iterator)是一种检查容器内元素并遍历元素的数据类型(1)每种容器类型都定义了自己的迭代器类型,如vector://这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型vector<int>::iterator iter;(2)使用迭代器读取vector的每一个元素vector<int> ivec(10, 1);for (vec

2017-03-12 15:11:02 598

原创 Linux——fork()函数

fork函数的功能fork函数的作用是创建一个与父进程几乎相同的进程,它们可以同时做相同的事情,当然也可以通过初始参数的不同来做不同的事情。 当进程调用fork函数时,内核会复制所有的内部数据结构,复制进程的页表项,然后把父进程的地址空间按页复制到子进程的地址空间中,不过现在的Linux已经不会采用这种耗时的方式了,而是使用“写时复制”的方法,来避免不必要的复制。函数原型如下:#include <

2017-03-11 20:59:41 306

原创 IO多路复用——select()

IO多路复用总结1、基本概念IO多路复用的作用是允许应用同时在多个文件描述符上阻塞,并在其中某个可以读写时收到通知。因此,IO多路复用是应用的关键所在,在设计上遵循以下原则。IO多路复用:当任何一个文件描述符IO就绪时进行通知。都不可用?在有可用的文件描述符之前一直处于休眠状态。唤醒:哪个文件描述符可用?处理所有IO就绪的文件描述符,没有阻塞。返回第一步,重新开始。IO多路复用适用如下场

2017-03-11 10:54:00 331

原创 Ext2文件系统

Ext2文件系统的总体布局,如下图。 1文件系统的最小存储单元是块(block),块的大小一般为512Bytes,或者是它的整数倍,块的大小是在格式化是所确定的。不能修改除非重新格式化。上图中显示了文件系统的总体布局,由一个Boot Block和对个Block Group组成,每个Block Group内部还有其他结构组成。Boot Block:启动块,大小为1KB,它的大小是由PC标准规定的,

2017-03-08 20:24:11 358

原创 Merge Sorted Array

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note: You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional

2017-03-08 19:29:46 217

原创 Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists./** * Definition for singly-linked list. * struct ListNode

2017-03-08 19:01:43 254

原创 虚基类

虚基类的是为了避免在多继承的情况下,派生类从不同路径继承来的同名数据成员和函数在内存中有多个副本。来看看下面这个例子:#include <iostream>using namespace std;class Base0{public: int var0; void fun0(){cout << "Member of Base0" << endl;}};class Base1 :

2017-03-08 00:40:45 725

原创 分散/聚集I/O

分散/聚集I/O分散/聚集I/O是一种可以在单词系统调用对多个缓冲区输入输出的方法,可以把多个缓冲区的数据写到单个数据流中,也可以把单个数据流读到多个缓冲区中。其命名的原因在于数据会被分散到指定缓冲区向量,或者从指定缓冲区向量中聚集数据。这种输入输出方法也称为向量I/O(vector I/O)。标准读写系统调用可以称为线性I/O(linear I/O)。优点编码模式更自然:如果数据本身是分段的(比

2017-03-06 22:27:10 757

原创 Int to Roman

Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.class Solution {public: string intToRoman(int num) { map<int, string> roman;

2017-03-06 16:09:24 364

原创 Shell环境变量配置文件

环境变量环境变量的作用是定义每个用户的操作环境,能够让我们快速访问某些程序或文件,省去了每次给出完整路径名的麻烦。环境变量配置文件简介当我们想添加自定义环境变量,并希望它永久生效,那么就需要将它写入到环境变量的配置文件中,Linux中的环境变量配置文件有下面5个,根据它们的作用范围分为两种,一种是针对整个系统,一种是针对单个用户。/etc/profile/etc/profile.d/*.sh/

2017-03-06 14:05:15 1877

原创 Linux 进程状态

Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。 在下文将对进程的 R、S、D、T、Z、X 六种状态做个说明。PROCESS STATE CODESD (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态(一般与IO有关)。R (TASK_RUNNING),可执行状态。S (TASK_INTERRUPTIBL

2017-03-05 23:23:16 402

原创 判断Int类型数据是否溢出

今天在leetcode上做题时,又遇到了与数据溢出相关的内容,在此记录下吧。 在头文件“limits.h”中有各种基本数据类型的最大最小值。/* Minimum and maximum values a `signed int' can hold. */# define INT_MIN (-INT_MAX - 1)# define INT_MAX 2147483647/* Max

2017-03-05 18:40:30 11506

原创 atoi

Implement atoi to convert a string to an integer.class Solution {public: int myAtoi(string str) { int sum = 0; bool flag = true; for (int j=0; j<str.size(); ) {

2017-03-05 17:08:03 253

原创 License Key Formatting

Now you are given a string S, which represents a software license key which we would like to format. The string S is composed of alphanumerical characters and dashes. The dashes split the alphanumerica

2017-03-05 14:59:14 325

C++ Gui Programming with Qt4

Qt4 的一个学习文档,不是扫描版,没有目录,但是文档十分清晰,不模糊。

2016-08-12

Matlab编程(第二版)

基于Matlab的基本编程教程,适合于初次接触Matlab的学习者,对于一些有编程基础的人来说,学习起来还是很轻松的。

2015-07-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除