- 博客(16)
- 资源 (3)
- 收藏
- 关注
原创 1.STL基础体系结构
STL分为容器、分配器、算法、迭代器、适配器、仿函数六大组件。 容器用来放数据,是各种数据结构的封装,它让我们不再需要进行内存分配操作,该操作将由分配器取代之。 算法是专门对容器操作的一组模板函数,它独立出来,通过模板变成一堆全局的通用操作。按照面向对象思想,应当将数据以及对应的一组操作统统封装入这个容器类中,这样每个容器就有自己独有的操作,但STL在这里采用了泛型编程的思想,...
2018-05-30 14:50:14 251
原创 7.=default ,=delete
C++中如果不专门定义,编译器会为每一个类定义三种成员函数,默认的构造函数,默认的拷贝构造函数,默认的赋值构造函数(重载=),侯捷老师称它们为big-three,C++11中增加了移动构造函数和移动赋值构造函数(下图中带Zoo&&的),因此增加两个,变成big-five(其实还有析构函数,编译器也会默认给定一个)。如下图中Empty类,这些默认的函数主要让编译器放置幕后的代码,...
2018-05-30 11:11:52 744
原创 6.range-based for statement(for循环的新用法)
C++11中定义了一种for循环用法,可用于容器的遍历,如下图。 对于一个容器,我们这样写(decl : coll),coll为一个容器,编译器就会把容器中的每个元素依次放入到decl这个变量中,从而完成遍历,且配合auto关键字可自动参数类型推导,很是方便。 但这里关键要注意值和引用含义的区别,当下面elem为值含义时,每次执行都要进行一次赋值的操作,即把vec的一个元素赋值...
2018-05-29 22:41:53 794 1
原创 5.explicit关键字
首先,explicit表示显示的、明确的意思,与隐式的意思相反,在C++11之前,存在如下图左的隐式转换,Complex的构造函数带两个参数,但一个已经带了初值,且此处无explicit关键字,因此它实际上就是一个non-explicit, one argument constructor(无exp关键字,仅需一个实参的构造函数),此时在执行如下的c1+5时,首先调用+的操作符重载函数,然...
2018-05-29 21:32:54 203
原创 4.Uniform Initialization(一致性初始化),Initializer list(初始化列表)
一致性初始化,顾名思义,说明旧版的C++初始化不一致,新版本则一致。确实,老版C++的初始化可能发生在小括号、大括号或是赋值符号上。因此,C++11引入了一致性初始化,全部都用大括号完成初始化,如图中黄色部分。黄色部分,在变量后面直接用大括号完成初始化。使用大括号实现一致性初始化牵扯出了一个新的概念,即Initializer lists,使用大括号的内容即为一个Initializer lists包...
2018-05-28 21:18:50 1670
原创 3.模板表达式的空格、空指针、自动推到的auto类型
1.模板表达式的空格老版C++在模板表达式中要加一个空格,新版的已去除。2.空指针类型使用nullptr而非0或NULL来声明一个指向空的指针,避免和int类型冲突发生错误。即它是一种指针类型,而非整数,避免编译器混淆。3.auto变量类型推导auto关键字使编译器根据表达式返回值自动推导类型,但是不要一直用,如图,一般只在类型名太长或太复杂的时候使用,毕竟作为程序员要时时刻刻知道每一个变量的类型...
2018-05-28 17:19:30 268
原创 2.Variadic Templates(数量不定的模板参数)
先看代码:void print(){}template <typename T,typename... Types> //...出现在这表示模板参数包void print(const T& firstArg, const Types&... args) //...函数参数类型包{ cout << firstArg << e...
2018-05-28 16:34:19 1423
原创 1.演进、环境与资源
C++11为2011年提出,业内也称为C++2.0。其新特性包括语言和标准库两个层面。C++标准库的header files不带(.h),例如#include <vector>新式C header files 不带(.h),例如#include <cstdio>旧式C header files(带.h),例如#include <stdio.h>以上新的库都在st...
2018-05-28 13:59:50 214 1
原创 算法学习——Fibonacci
下面对现代码: #include <iostream>#include <utility>std::pair<uint64_t,uint64_t> Fib(size_t n){ if(n>0) { auto PF = Fib(n / 2); //C++11新特性,auto返回值由编译器根据初值确定 auto t0 = PF.first;...
2018-05-27 14:33:28 143
原创 Linux升级gcc到4.8.2(包含c++11)
1.获取安装包,解压安装wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2tar -xf gcc-4.8.2.tar.bz22.运行自带脚本,完成下载、配置、安装依赖库,可以节约我们大量的时间和精力cd gcc-4.8.2 ./contrib/download_prerequisites 3.建立一个目录供编译出的文件存放mk...
2018-05-26 21:33:06 1549
原创 内核编程与应用程序开发的主要区别
内核编程既不能访问C库也不能访问标准的C头文件。内核编程时必须使用GNU C。内核编程缺乏像用户空间那样的内存保护机制。内核编程时难以执行浮点数运算。内核给每个进程只有一个很小的定长堆栈。由于内核支持异步中断、抢占和SMR,因此必须时刻注意同步和并发。要考虑可移植性的重要性。...
2018-05-25 10:54:55 3571
原创 CentOS7下安装与打开telnet服务
CentOS7不默认安装xinetd以及telnet服务,因此需要首先安装这两项。1.安装之前首先查找telnet的安装包yum list | grep telnet-serveryum list | grep xinetd2.用yum执行安装yum -y install telnet-server.x86_64 //telnet服务器yum -y install telnet.x86_64 ...
2018-05-23 11:54:24 9766
原创 TCP协议详解(三):TCP状态转移
状态转移过程 TCP连接的任意一端在任一时刻都处于某种状态,当前状态可以通过netstat命令查看。下图为完整的TCP状态转移图,它描绘了所有的TCP状态以及可能的状态转换。 图中的粗虚线表示典型的服务器端连接的状态转移;粗实线表示典型的客户端连接的状态转移。CLOSED是一个假想的起始点,并不是一个实际状态。 这里首先讨论服务器的典型状态...
2018-05-03 15:51:35 459
原创 TCP协议详解(一):TCP头部结构
TCP字节流服务 网络传输层中,TCP是面向连接、可靠的、字节流传输。 TCP协议通信双方必须先建立连接,通信双方必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP是全双工的,即双方的数据读写可通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。 TCP协议的这种连接是一对一的,所以基于广播和多播(目标是多个主机地址)的应用程序不...
2018-05-02 20:13:46 91001 12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人