开发成长之路(6)-- C++从入门到开发(C++知名库:STL入门·容器(一))

在这里插入图片描述


前言

其实我刚开始也没想到会写这么快,明显后面几篇的数据跟不上第一篇啦。可能是有一部分朋友对CSDN还不是很了解吧。
在文中的蓝字是可以点击的超链接,在文章标题下面有文章所属专栏,也是可以点击的,我这一系列的文章都在一个专栏下:
开发成长之路
你们可以慢慢看,不懂的随时私信我,我在CSDN上还是比较活跃的,一般一个小时内都能回复。

这个专栏你们可以放心,我绝对不会设置成付费专栏的。毕竟这儿是我最开始接触编程的地方,梦想开始的地方。


资源介绍

STL方面的知识,我也不藏着掖着,我就是“搬运工”,从侯捷老师的《STL源码剖析》中学习,再转述。

如果想要深入了解C++编程之美,一要看设计模式,二要看侯捷老师的书。

在这里插入图片描述

这本书我看了三遍,写了一个专栏,后来被删的差不多了。

因为经常翻新。

这一篇,我先挑最简单的“使用方法”来讲讲。


STL概述

STL,虽然是一套程序库,但却不仅仅是一套一般印象中的程序库,而是一个具有划时代意义的、有着深厚理论基础的发明。
说是软件组件史上的一大突破,也当之无愧。

为了建立数据结构与算法的一套标准,降低其间的耦合关系,以及提升各自的交互性、弹性、独立性,C++社群中诞生了STL.

STL是一个开源项目,所以有很多个版本。我讲解及使用的是SGI STL版本,不论是符号命名,还是编码风格上,这个版本的可读性非常高。


STL可不止有容器

对于大部分接触过STL的人来说,对于STL的印象应该是极好的,不过大部分人可能也是简单的将容器和STL的全部画起了等号,最多再加上算法,毕竟我们使用STL常用到的也就那两套头文件。说实话我也前也是这么认为的。
其实STL提供了六大组件,容器和算法只是其中一部分,它们分别是:

容器、算法、迭代器、仿函数、配接器、配置器。

这些组件都是什么?
不要急,就算知道也再看一遍吧。

  • 容器

  • 各种数据结构,如Vector、List、Map,用于存放数据。

  • 算法

  • 各种常见算法如:排序、增删查等。从实现来看,STL算法属于泛型函数。

  • 迭代器

  • 很惊奇,迭代器不属于容器,也不属于算法。

  • 扮演起容器与算法之间的“粘合剂”,是“泛型指针”。

  • 原生指针可以作为一种迭代器,不过迭代器一般是以智能指针的形式存在的。

  • 仿真函数

  • 行为类似函数,从实现来看是一种重载了operator()的类或模板类。

  • 函数指针可视为狭义上的仿真函数。

  • 配接器

  • 说来话长,一种用于修饰容器、迭代器、仿真函数的东西。

  • 配置器

  • 空间配置与管理,如果要深入了解STL代码,则这一块将会是奠基石一般的存在。


来看一下STL六大组件联合工作的图示:
在这里插入图片描述


STL的序列式容器容器

源码之前,了无秘密

曾经面试官问过我这么一个问题:请你描述一下,STL中的所有容器,它们的底层实现机制、它们增删查改的时间复杂度是多少。
当时回答的迷迷糊糊的。本篇,就围绕这个话题展开。

Vector

什么是Vector?可以理解为是动态数组。

Vector所采用的数据结构非常简单,连续线性空间。

template <class T,class Alloc * alloc>	//模板,后面会专门出一篇写C++的模板编程
class vector{
···
protected:
	iterator start;	//表示目前使用空间的头
	iterator finish;	//表示目前使用空间的尾
	iterator end_of_storage;	//表示目前可用的空间的尾
···
}

为了降低空间配置的时间成本,vector实际配置的大小可能会比客户端需求的量更大一些,以备将来扩充的可能。

看图:
在这里插入图片描述

运用这三个算子,可以很轻易的实现一些功能:

template <class T,class Alloc * alloc>	
class vector{
···
public:
	iterator begin(){return start;}
	iterator end(){return finish;}
	size_type size() const{return size_type(end() - begin());}
	size_type capacity() const{return size_type(end_of_storage - begin());}	//还剩多少空间
	bool empty() const{return begin() == end();}
	reference operator[](size_type n){return *(begin()+n);}	//下标取值法
	reference front(){return *begin();}
	reference back(){return *(end()-1);}
	//返回首尾地址
···
}

再来看一些常用函数的底层实现:

void push_back(const T& x){
	if(finish != end_of_storage){	//还有备用空间
		construct(finish,x);	//一个插入函数,暂时知道这个就够了,偏底层
		++finish;
	}
	else{	//空间不够用了
		insert_aux(end(),x);	//更底层了,看上面那张图
	}
}

注意:一旦引起空间重新配置,指向原Vector的所有迭代器都将失效!!!


pop_back() 删除末端元素:

void pop_back(){
	--finish;
	destroy(finish);	//这个destory后面讲空间配置器的时候会讲到
	//就是这么简单
}

erase() 清除(first,last)中所有元素:

先看图:
在这里插入图片描述

iterator erase(iterase first,iterase last){
	iterator i = copy(last,finish,first)	//copy后面的篇章会有,先克服一下困难
	destroy(i,finish);
	finish = finish - (last - first);
	return first;
}

erase() 清除某个位置上的元素:

iterator erase(iterator position){
	if(position +1 != end())
		copy(position +1,finish,position)
	--finish;
	destroy(finish);
	return position;
}

clear() 方法:

void clear(){
	erase(begin(),end());
}

insert() 插入操作:
这个操作的代码实在是太多的底层细节了,还是看图吧:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


List

Vector可以用数组的知识来覆盖,那么List,就用链表的知识来覆盖吧。
这里要注意:
list对于任何元素的插入和删除,永远都是常数时间,我也得去一探究竟啦,我当初回答错了。

先看看数据结构:

template <class T>
struct __list_node{
	typedef void* void_pointer;
	void_pointer prev;
	void_pointer next;
	T data;
}

双向链表!!!

list的迭代器和vector的不同,它的要求更高一些。因为链表使用的存储空间往往是零零散散的,所以list的迭代器必须有能力在杂乱的存储空间中快速的跳转。

相对于Vector,List还有一个优势,就是不论如何的插入和接合操作,都不会造成原有的List迭代器失效。List的删除操作也只有指向那个被删除的元素的迭代器失效,其它迭代器不会受影响。
在这里插入图片描述

SGI list不仅仅是一个双向链表,还是个环状双向链表,所以它只需要一个指针,便可以完整的表现链表。

template <class T,class Alloc = alloc>	//缺省使用alloc作为配置器
class list{
protected:
	typedef __list_node<T> list_node;
public:
	typedef list_node* link_type;
protected:
	link_type node;	//只要一个指针,便可以表示整个循环链表

如果让指针node指向刻意置于尾端的一个空白节点,node便能符合STL对于“前闭后开”的区间要求,成为list迭代器。

iterator begin(){return (link_type)((*node).next);}

iterator end(){return node;}

bool empty() const{return node->next == node;}

size_type size() const{
	size_type result = 0;
	disance(begin(),end(),result);	//一个全局函数
	return result;
}

reference front(){return *begin();}
reference back(){return *--end();}

在这里插入图片描述


关于list的增删改查,其实跟链表也就差不多了。


一篇讲两个容器,写多了怕是大家也看不下去了,那么今天就写到这里啦。
明天我们再会。在这里插入图片描述

已标记关键词 清除标记
<p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><span style="max-width: 100%; box-sizing: border-box; font-size: 18px;"><strong>学习计划:</strong></span></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">1、每天学习1个小时,大概1个月完成。 2、认真听讲,要自己揣摩,明白原理。 3、动手实践、必须要多做课后练习题,遇到不会的,及时提问。</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">课程目标:</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">从一个纯小白,到真正理解变量的实质,指针的实质,学会C++类及面向对象编程</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">课程简介:</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><span style="max-width: 100%; box-sizing: border-box; color: #ff0000;"><span style="max-width: 100%; box-sizing: border-box; font-size: 20px;"><strong><strong><strong>敬告:</strong></strong>该系列的课程在抓紧录制更新中,敬请大家关注。</strong></span></span></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>---------------------------------------------------</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"> </p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"> </p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>---------------------------------------------------</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><span style="max-width: 100%; box-sizing: border-box; color: #ff0000;"><span style="max-width: 100%; box-sizing: border-box; font-size: 20px;"><strong>给学员(从小白到大牛)的3年学习路径及计划</strong></span></span></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">技术方面分三块:</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>1.纯开发技术方向</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>2.音视频流媒体专业方向</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>3.项目实战</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>---------------------------------------------------</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><span style="max-width: 100%; box-sizing: border-box; color: #ff0000;"><strong>1.纯开发技术方向</strong></span></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(1) C++必须要过硬(至少学会10本经典好书)</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(2) 系统级编程(Windows、Linux),必须特别熟练系统API,灵活运用</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(3) 框架与工具(Qt、MFC):必须精通其中一种。</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(4) 架构与设计模式:需要提升一个高度,不再是简单的编码,而是思维模式。</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(5) 驱动级别(如果有兴趣,可以深入到驱动级:包括Windows、Linux)</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(6) 最好学习点Java+Html+javascript等WEB技术。</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><span style="max-width: 100%; box-sizing: border-box; color: #ff0000;"><strong>2.音视频流媒体专业方向</strong></span></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(1) 音视频流媒体基础理论:</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">    必须认真学会,否则看代码就是看天书</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(2) 编解码方向:精通h.264,h.265(hevc),</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"> 包括理论和各个开源(ffmpeg,libx264,libx265,...)。</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(3) 直播方向:  精通各种直播协议(rtsp,rtmp,hls,http-flv,...),</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"> 钻研各个开源(live555,darwin,srs,zlmediakit,crtmpserver,...)</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(4) 视频监控:  理论+开源(onvif+281818)(EasyMonitor、iSpy、ZoneMinder(web)、...)  </p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><span style="max-width: 100%; box-sizing: border-box; color: #ff0000;"><strong>3.项目实战</strong></span></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(1) Qt项目:  至少要亲手练习10个实战项目</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(网络服务器、多线程、数据、图像处理、多人聊天、等等)</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">(2)音视频项目:包括编解码、视频监控、直播等各个方向,都需要亲手实战项目,</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">包括视频服务器、后台管理系统、前端播放器(多端)</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>---------------------------------------------------</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"> </p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><img src="https://img-bss.csdnimg.cn/202101280710351145.jpg" alt="" /></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"> </p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"><strong>具体的内容包括:</strong></p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"> </p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;">n 1.全书概览与分析 5<br /><br />1.1 初步认识:做到心中有数 5<br /><br />1.2 图解:章节关系 6<br /><br />1.3 探讨:教学方法论 7<br /><br />1.4 探讨:学习方法论 7<br /><br />1.5 C++的1.0与2.0 8<br /><br />1.6 开发工具Qt5.9和VS2015/7/9 8<br /><br />控制台: 8<br /><br />UI界面: 8<br /><br />1.7 安装并搭建Qt5.9.8开发环境 9<br /><br />1.下载软件Qt Creator 5.9.8 9<br /><br />2.双击开始安装 9<br /><br />3.注册Qt账号 11<br /><br />4.激活Qt账号 12<br /><br />5.选择安装路径 17<br /><br />6.选择“安装组件” 19<br /><br />7.同意“许可协议” 21<br /><br />8.点击“安装”后,请喝杯茶 24<br /><br />1.8 捋起袖子开干:几个小案例 35<br /><br />第一:写代码打印“CS”图形 36<br /><br />第二:写代码打印各种图形(作业) 36<br /><br />1.9 原书第一章剖析 37<br /><br />1.计算机是什么? 37<br /><br />2.程序是什么? 38<br /><br />3.程序设计 38<br /><br />4.C++入门程序示例 40<br /><br />n 第2章 C++基础知识 41<br /><br />2.1 变量和赋值 41<br /><br />2.2 输入和输出 42<br /><br />2.3 数据类型和表达式 43<br /><br />2.4 简单控制流程 44<br /><br />2.5 程序风格 45<br /><br />2.6 x=x-3到底是个什么鬼? 46<br /><br />第3章 更多的控制流程 47<br /><br />3.1 使用布尔表达式 47<br /><br />3.2 多路分支 48<br /><br />3.3 C++循环语句详解 48<br /><br />3.4 设计循环 51<br /><br />3.5 课堂练习 51<br /><br />第4章 过程抽象和返回值的函数 52<br /><br />4.1 自顶向下设计 52<br /><br />4.2 预定义函数 53<br /><br />4.3 程序员自定义函数 53<br /><br />4.4 过程抽象 54<br /><br />4.5 作用域和局部变量 55<br /><br />4.6 重载函数名称 55<br /><br />第5章 用函数完成所有子任务 56<br /><br />5.1 void函数 57<br /><br />5.2 传引用参数 57<br /><br />5.3 使用过程抽象 59<br /><br />5.4 测试和调试函数 59<br /><br />5.5 常规调试技术 59<br /><br />第6章 I/O流——对象和类入门 60<br /><br />6.1 流和基本文件I/O 60<br /><br />6.2 流I/O工具 61<br /><br />6.3 字符I/O 62<br /><br />第7章 数组 63<br /><br />7.1 数组入门 63<br /><br />7.2 函数中的数组 65<br /><br />7.3 数组编程 66<br /><br />7.4 多维数组 67<br /><br />第8章 字符串和向量 68<br /><br />8.1 字符串的数组类型 68<br /><br />8.2 标准string类 69<br /><br />8.3 向量 71<br /><br />第9章 指针和动态数组 71<br /><br />9.1 指针 71<br /><br />9.2 手工动态数组 74<br /><br />第10章 定义类 76<br /><br />10.1 结构体 77<br /><br />10.2 类 78<br /><br />10.3 抽象数据类型 81<br /><br />10.4 继承 82<br /><br />10.5 拷贝构造函数 83<br /><br />10.6 析构函数 84<br /><br />10.7 重载赋值(=)操作符 84<br /><br />第11章 友元函数、重载操作符和数组 86<br /><br />11.1 友元函数 87<br /><br />11.2 重载操作符 88<br /><br />11.3 数组和类 91<br /><br />11.4 类和动态数组 91<br /><br />第12章 独立编译和命名空间 92<br /><br />12.1 独立编译 92<br /><br />12.2 命名空间 93<br /><br />第13章 指针和链表 94<br /><br />第14章 递归 95<br /><br />第15章 继承 96<br /><br />15.1 继承基础 96<br /><br />15.2 继承细节 97<br /><br />15.3 多态性(虚函数) 98<br /><br />第16章 异常处理 100<br /><br />16.1 异常处理基础 100<br /><br />16.2 用于异常处理的编程技术 101<br /><br />第17章 模板 102<br /><br />17.1 用于算法抽象的模板 102<br /><br />17.2 用于数据抽象的模板 103<br /><br />第18章 标准模板STL) 104<br /><br />18.1 迭代器 104<br /><br />18.2 容器 105<br /><br />18.3 泛型算法 106<br /><br />18.4 不断进化的C++ 106<br /><br />第19章 Qt界面开发入门 106<br /><br />附录 107</p> <p style="margin: 0px; max-width: 100%; box-sizing: border-box; color: #333333; font-family: 'Hiragino Sans GB', 'Microsoft Yahei', arial, 宋体, 'Helvetica Neue', Helvetica, STHeiTi, sans-serif; font-size: 14px; background-color: #ffffff;"> </p>
相关推荐
<p> <span style="color:#337FE5;"><strong>【为什么还需要学习C++?】</strong></span> </p> <p style="margin-left:0cm;"> 你是否接触很多语言,但从来没有了解过编程语言的本质? </p> <p style="margin-left:0cm;text-align:start;"> 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? </p> <p style="margin-left:0cm;text-align:start;"> 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? </p> <p style="margin-left:0cm;text-align:start;">   </p> <p style="margin-left:0cm;text-align:start;"> 那么C++就是你个人能力提升,职业之路进阶的不二之选。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;"> <strong><span style="color:#337FE5;">【课程特色】</span></strong> </p> <p style="margin-left:0cm;text-align:start;"> 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准全部知识体系。 </p> <p style="margin-left:0cm;text-align:start;"> 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 </p> <p style="margin-left:0cm;text-align:start;"> 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p class="ql-long-24357476"> <span style="color:#337FE5;"><strong>【学完后我将达到什么水平?】</strong></span> </p> <p class="ql-long-24357476"> 1.对C++的各个知识能够熟练配置、开发、部署; </p> <p class="ql-long-24357476"> 2.吊打一切关于C++的笔试面试题; </p> <p class="ql-long-24357476"> 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 </p> <p class="MsoNoSpacing" style="margin-left:18pt;"> <br /> </p> <div> <br /> </div> <p> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#337FE5;"><strong>【面向人群】</strong></span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">1.希望一站式快速入门C++初学者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">2.希望快速学习 C++、掌握编程要义、修炼内功的开发者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">3.有志于挑战更高级的开发项目,成为资深开发的工程师。</span> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p> <br /> </p> <p> <span style="color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> 本课程包含3大模块 </p> <p> <strong>基础篇</strong><br /> 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 </p> <p> <br /> <strong>进阶篇</strong><br /> 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 </p> <p> <br /> <strong>提升篇:</strong><br /> 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。 </p> <p> <img src="https://img-bss.csdnimg.cn/202007091130239667.png" alt="" /> </p>
第一篇 预备知识 第一章 c++编程技术 1.1 c++与c语言区别 2 1.1.1文件扩展名的改变 2 1.1.2简化输入/输出手段 3 1.1.3 数据类型声明的改变 3 1.1.4动态内存分配算符的使用 4 1.1.5 引用 (references) 类型 6 1.1.6 const语义的扩展 7 1.1.7 指针声明类型与对象类型相一致 10 1.1.8 int与char不再等价 11 1.1.9 结构数据类型的变化 11 1.1.10 数组和指针技术的不同 11 1.2 c++存储技术 12 1.2.1 c++存储类型 12 1.2.2 c++存取修饰符 14 1.2.3 c++对象的生存期 14 1.3 c++函数技术 16 1.3.1类的构造函数、析构函数与赋值函数 16 1.3.2 在派生类中实现类的基本函数 26 .1.3.3内联函数技术 27 1.3.4友元函数技术 28 1.4 c++面向对象机制实现 29 1.4.1 类的继承技术 29 1.4.2 函数重载技术 33 1.4.3运算符重载技术 34 1.4.4纯虚函数和抽象类技术 36 1.5 小结 37 第二章 c++标准技术 2.1 c++标准简介 39 2.1.1 i/o流技术 41 2.1.2 string类 43 2.1.3 标准异常类 43 2.1.4 标准模板类 44 2.2 c++输入/输出流技术 45 2.2.1 c++语言输入/输出流概述 45 2.2.2输入输出格式控制 45 3.2.3特殊输入/输出流格式的设定 50 2.2.4自定义的流操作符 54 2.2.5 根本不用于标准流运算符间的流字符串读/写函数 56 2.2.6 标准输入/输出流的操作符的重载 57 2.2.7 c++文件输入/输出流 58 2.3 c++字符串技术 69 2.3.1字符串类基本操作 70 2.3.2 复杂字符串实例 83 2.4标准异常类 86 2.4.1 绝对终止机制 86 2.4.2 非局部goto机制 88 2.4.3 signals机制 89 2.4.4 c++异常处理机制 90 2.4.5 类的异常处理 92 2.5小结 94 第二篇 c++ stl技术原理和组成 第三章 stl技术原理 3.1 模板概述 96 3.1.1 smalltalk 方法 96 3.1.2 模板方法 97 3.1.3模板参数 98 3.1.4关键字typename的使用 99 3.2 函数模板 100 3.2.1 函数模板基础 100 3.2.2 函数的定制 102 3.2.3 函数模板实例 104 3.3类模板 107 3.3.1 类模板定义 107 3.3.2 类模板使用 110 3.3.3类模板中的友元 110 3.3.4模板程序设计举例 111 3.4 模板安全 114 3.4.1 class类型的参数 115 3.4.2 使得包容安全 116 3.4.3 默认构造函数 116 3.4.4 operator new 117 3.4.5 destructor 118 3.4.6 其他 118 3.5模板的特殊性 121 3.5.1一个特殊化的例子 121 3.5.2 指针特殊化 123 3.6 模板实例-list 容器类设计 124 3.7 小结 127 第四章 stl技术概述 4.1 stl简介 129 4.1.1 什么是stl 129 4.1.2 stl的发展 130 4.1.3 stl的使用和实现 131 4.1.4 名字空间技术 133 4.2 stl基本结构 134 4.2.1 容器(containers) 135 4.2.2 算法(algorithms) 139 4.2.3迭代器(iterators) 141 4.2.4 函数对象(function object) 145 4.2.5 其它部件 145 4.3 stl编程概述 146 4.3.1 传统c++编程技术 146 4.3.2 stl编程技术 148 4.4 stl头文件和编译器 152 4.5 stl编程关键 154 4.5.1 stl容器技术 154 4.5.2 c++stl技术 156 4.6 小结 161 第三篇 c++ stl容器编程技术 第五章 stl容器技术总述 5.1容器技术概述 163 5.1.1 容器介绍 167 5.1.2 forward 容器 167 5.1.3 reversible 容器 168 5.1.4 sequence 168 5.1.5
<p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">《朱老师带你学C++》属于系列课程《朱有鹏老师热门编程语言全解》的第一部分,主要针对C++语言学习。本课程可以看做是嵌入式linux核心课程中《C语言专题》课程的延续,在学好了C语言前提下继续深度学习C++语言。整个课程共分为5部分。涵盖了C++基础语法和使用,面向对象,STL与泛型,Boost和设计模式,C++编程优化技巧等非常广泛的内容,是市面上非常缺少的深度完整学习C++,培养编程技能和修养的一套系列学习课程。整个课程预计2020年底前录制完成主体部分,总时长预计150小时左右。</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">朱老师C++第1部分-从C到C++</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">朱老师C++第2部分-C++和面向对象</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">朱老师C++第3部分-STL等和泛型</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">朱老师C++第4部分-C++编程优化和常见面试题</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">朱老师C++第5部分-Boost和设计模式</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;"> </p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">课程特色</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">*深入浅出,通俗易懂。不怕学不会,就怕你不学习。</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">*思路清晰、语言风趣,对着视频看也不会想睡觉······</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">*视频 + 文档 + 练习题 + 答疑相结合。</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">*基础知识 + 思路引导的教学方式,授之以鱼更授之以渔。</p> <p style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; background-color: #ffffff;">*系列课程。本教程只是入门篇,后续还有更多更精彩视频更新中。</p>
C++标准函数中80%是STL,其中广泛使用了泛性编程思想,在其中分为几大部分。 1:语言支持部分。 2:诊断部分。包含了异常处理,断言,错误代码三大方式。 3:通用工具部分。包括动态内存管理工具,日期/时间处理工具等。 4:字符串处理部分。 5:国际化部分。使用Locale和facet可以为程序提供多国际化支持,包括各种字符集,日期时间,数值货币处理的支持。 6容器(containers)部分。STL重要部分,包含了许多数据结构,有vector(动态增加的数组),queue(队列),stack(堆栈)……甚至也包括string,它也可以看做为一种容器,并且适用所有的容器可用的方法。 7:算法(algorithms)部分。STL重要部分,包含了70多个通用算法,都是优化的效率很高的,用来控制各种容器,内建数组等。例如find可以用来在容器中查找某特定值的元素,for_each可以用来将函数应用到容器元素之上,sort用于对容器中的元素排序。 8;迭代器(iterators)STL重要组成部分,每个容器都有自己的迭代器,只有容器才可以进行访问自己的元素,它类似指针,将算法和容器中的元素联系起来。 9:数值(numerics)部分。包含了一些数学运算的功能,对复数运算提供了支持。 10:输入输出(I/O)部分。摸版化的IOStream部分。他提供了对C++程序的支持,并且对原有的iostream兼容。 所以,总体看来,C++标准函数,包含的10大块内容中,STL主要包含了四个部分,迭代器,容器,算法。和额外的一个字符串。
C++_Primer_Plus中文第五版   C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐 述了C++的基本概念和技术。   全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系 表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、 虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板、输入/输出等内 容。   本书针对C++初学者,从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要 求读者有较多C语言方面的背景知识。本书可作为高等院校C++课程的教材,也可供初学者自学C++时使用。 本书享有“程序员和开发人员学习C++的完整教程”的美誉,它经过仔细的测试,制作精细,是计算机 行业的经典著作。前4版在美国的总销售量超过了10万册。该书阐述了包括结构化代码和自顶向下设计在内 的编程原理,涵盖了类。继承。模板。异常以及最新的面向对象编程技术等内容。 作者Stephen Prata是受人尊敬的作者和教育家,他以清晰的语言,对C++做了具有启发性的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过大量简短、易于输入的范例,每 次阐述一两个概念,激励读者通过立刻应用来掌握全新的主题;而每章最后的复习题和编程练习则强调了 最重要的信息,并帮助读者消化最难以理解的概念。本书是一本友好而易于使用的自学指南,适合用做编 程课程的教材,也可供熟悉其他语言的开发人员参考,以更深入地理解C++语言的基本知识。 本书采用了各种教学技巧,以提高读者的学习效率: ● 兼顾基本c语言知识和C++特性; ● 就何时以及为何使用特性提供了概念性指南; ● 强调实践,通过简短、易于输入的范例每次阐述一两个概念; ● 包含几百个范例程序; ● 通过示意图、注意、提示等来组织和区分相关的概念; ● 提供了复习题和编程练习,让读者能够测试自己对所学知识的理解程度; ● 以极大的灵活性实际使用通用c++——不要求读者使用特定的计算机、操作系统或编译器; ● 以ISO/ANSI标准为基础,对模板、标准模板、字符串类、异常、RTTI和名称空间进行了讨论。 译者介绍:Stephen Prata在加州肯特菲尔得的马林学院教授天文、物理和计算机科学。他毕业于加州理工 学院,在加州大学伯克利分校获得博士学位。Stephen本人或与他人合作编写的图书有十多本。他撰写的 The Waite Group's New C Primer Plus一书获得了计算机出版联合会1990年度最佳“How-to”计算机图书 奖;他撰写的The Waite Group's C++ Primer Plus一书获得了计算机出版联合会1991年度最佳“How-to” 计算机图书奖的提名。 前言 学习C++是一次探索之旅,因为这种语言容纳了好几种编程模式,其中包括面向对象编程、通用编程和 传统的过程化编程。随着新特性的不断添加,C++一度成为一个活动目标,不过现在有了2003年的ISO/ ANSIC++标准第二版后,已经稳定下来了。现代编译器支持该标准要求的多数或全部特性,程序员要花时间 来习惯这些特性的应用。本书第五版是按ISO/ANSI标准编写的,将介绍这种成熟的C++版本。 本书在介绍C++特性的同时,讨论了基本C语言,使二者成为有机的整体。书中介绍了C++的基本概念, 并通过短小精悍的程序来阐明,这些程序都很容易复制和试验。还介绍了输入和输出、如何让程序执行重 复性任务、如何让程序做出选择、处理数据的多种方式以及如何使用函数等内容。另外,还讲述了C++在C 语言的基础上新增的许多特性,其中包括: ● 类和对象。 ● 继承。 ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(或独立于类型的)编程,这种技术是由模板和标准模板(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的名称空间。 本书在传授知识方面有几个优点。大约20年前,《C Primer Plus))一书开创了优良的初级教程传统,本书 建立在这样的基础之上,吸收了其中很多成功的理念: ● 初级教程应当是友好的、便于使用的指南。 ● 初级教程不要求读者已经熟悉相关的编程概念。 ● 初级教程强调的是“实践性”学习,通过简短、容
C++_Primer_Plus中文第五版   C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐 述了C++的基本概念和技术。   全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系 表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、 虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板、输入/输出等内 容。   本书针对C++初学者,从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要 求读者有较多C语言方面的背景知识。本书可作为高等院校C++课程的教材,也可供初学者自学C++时使用。 本书享有“程序员和开发人员学习C++的完整教程”的美誉,它经过仔细的测试,制作精细,是计算机 行业的经典著作。前4版在美国的总销售量超过了10万册。该书阐述了包括结构化代码和自顶向下设计在内 的编程原理,涵盖了类。继承。模板。异常以及最新的面向对象编程技术等内容。 作者Stephen Prata是受人尊敬的作者和教育家,他以清晰的语言,对C++做了具有启发性的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过大量简短、易于输入的范例,每 次阐述一两个概念,激励读者通过立刻应用来掌握全新的主题;而每章最后的复习题和编程练习则强调了 最重要的信息,并帮助读者消化最难以理解的概念。本书是一本友好而易于使用的自学指南,适合用做编 程课程的教材,也可供熟悉其他语言的开发人员参考,以更深入地理解C++语言的基本知识。 本书采用了各种教学技巧,以提高读者的学习效率: ● 兼顾基本c语言知识和C++特性; ● 就何时以及为何使用特性提供了概念性指南; ● 强调实践,通过简短、易于输入的范例每次阐述一两个概念; ● 包含几百个范例程序; ● 通过示意图、注意、提示等来组织和区分相关的概念; ● 提供了复习题和编程练习,让读者能够测试自己对所学知识的理解程度; ● 以极大的灵活性实际使用通用c++——不要求读者使用特定的计算机、操作系统或编译器; ● 以ISO/ANSI标准为基础,对模板、标准模板、字符串类、异常、RTTI和名称空间进行了讨论。 译者介绍:Stephen Prata在加州肯特菲尔得的马林学院教授天文、物理和计算机科学。他毕业于加州理工 学院,在加州大学伯克利分校获得博士学位。Stephen本人或与他人合作编写的图书有十多本。他撰写的 The Waite Group's New C Primer Plus一书获得了计算机出版联合会1990年度最佳“How-to”计算机图书 奖;他撰写的The Waite Group's C++ Primer Plus一书获得了计算机出版联合会1991年度最佳“How-to” 计算机图书奖的提名。 前言 学习C++是一次探索之旅,因为这种语言容纳了好几种编程模式,其中包括面向对象编程、通用编程和 传统的过程化编程。随着新特性的不断添加,C++一度成为一个活动目标,不过现在有了2003年的ISO/ ANSIC++标准第二版后,已经稳定下来了。现代编译器支持该标准要求的多数或全部特性,程序员要花时间 来习惯这些特性的应用。本书第五版是按ISO/ANSI标准编写的,将介绍这种成熟的C++版本。 本书在介绍C++特性的同时,讨论了基本C语言,使二者成为有机的整体。书中介绍了C++的基本概念, 并通过短小精悍的程序来阐明,这些程序都很容易复制和试验。还介绍了输入和输出、如何让程序执行重 复性任务、如何让程序做出选择、处理数据的多种方式以及如何使用函数等内容。另外,还讲述了C++在C 语言的基础上新增的许多特性,其中包括: ● 类和对象。 ● 继承。 ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(或独立于类型的)编程,这种技术是由模板和标准模板(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的名称空间。 本书在传授知识方面有几个优点。大约20年前,《C Primer Plus))一书开创了优良的初级教程传统,本书 建立在这样的基础之上,吸收了其中很多成功的理念: ● 初级教程应当是友好的、便于使用的指南。 ● 初级教程不要求读者已经熟悉相关的编程概念。 ● 初级教程强调的是“实践性”学习,通过简短、容
C++_Primer_Plus中文第五版   C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐 述了C++的基本概念和技术。   全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系 表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、 虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板、输入/输出等内 容。   本书针对C++初学者,从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要 求读者有较多C语言方面的背景知识。本书可作为高等院校C++课程的教材,也可供初学者自学C++时使用。 本书享有“程序员和开发人员学习C++的完整教程”的美誉,它经过仔细的测试,制作精细,是计算机 行业的经典著作。前4版在美国的总销售量超过了10万册。该书阐述了包括结构化代码和自顶向下设计在内 的编程原理,涵盖了类。继承。模板。异常以及最新的面向对象编程技术等内容。 作者Stephen Prata是受人尊敬的作者和教育家,他以清晰的语言,对C++做了具有启发性的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过大量简短、易于输入的范例,每 次阐述一两个概念,激励读者通过立刻应用来掌握全新的主题;而每章最后的复习题和编程练习则强调了 最重要的信息,并帮助读者消化最难以理解的概念。本书是一本友好而易于使用的自学指南,适合用做编 程课程的教材,也可供熟悉其他语言的开发人员参考,以更深入地理解C++语言的基本知识。 本书采用了各种教学技巧,以提高读者的学习效率: ● 兼顾基本c语言知识和C++特性; ● 就何时以及为何使用特性提供了概念性指南; ● 强调实践,通过简短、易于输入的范例每次阐述一两个概念; ● 包含几百个范例程序; ● 通过示意图、注意、提示等来组织和区分相关的概念; ● 提供了复习题和编程练习,让读者能够测试自己对所学知识的理解程度; ● 以极大的灵活性实际使用通用c++——不要求读者使用特定的计算机、操作系统或编译器; ● 以ISO/ANSI标准为基础,对模板、标准模板、字符串类、异常、RTTI和名称空间进行了讨论。 译者介绍:Stephen Prata在加州肯特菲尔得的马林学院教授天文、物理和计算机科学。他毕业于加州理工 学院,在加州大学伯克利分校获得博士学位。Stephen本人或与他人合作编写的图书有十多本。他撰写的 The Waite Group's New C Primer Plus一书获得了计算机出版联合会1990年度最佳“How-to”计算机图书 奖;他撰写的The Waite Group's C++ Primer Plus一书获得了计算机出版联合会1991年度最佳“How-to” 计算机图书奖的提名。 前言 学习C++是一次探索之旅,因为这种语言容纳了好几种编程模式,其中包括面向对象编程、通用编程和 传统的过程化编程。随着新特性的不断添加,C++一度成为一个活动目标,不过现在有了2003年的ISO/ ANSIC++标准第二版后,已经稳定下来了。现代编译器支持该标准要求的多数或全部特性,程序员要花时间 来习惯这些特性的应用。本书第五版是按ISO/ANSI标准编写的,将介绍这种成熟的C++版本。 本书在介绍C++特性的同时,讨论了基本C语言,使二者成为有机的整体。书中介绍了C++的基本概念, 并通过短小精悍的程序来阐明,这些程序都很容易复制和试验。还介绍了输入和输出、如何让程序执行重 复性任务、如何让程序做出选择、处理数据的多种方式以及如何使用函数等内容。另外,还讲述了C++在C 语言的基础上新增的许多特性,其中包括: ● 类和对象。 ● 继承。 ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(或独立于类型的)编程,这种技术是由模板和标准模板(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的名称空间。 本书在传授知识方面有几个优点。大约20年前,《C Primer Plus))一书开创了优良的初级教程传统,本书 建立在这样的基础之上,吸收了其中很多成功的理念: ● 初级教程应当是友好的、便于使用的指南。 ● 初级教程不要求读者已经熟悉相关的编程概念。 ● 初级教程强调的是“实践性”学习,通过简短、容
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值