个人总结的c++编程心得——基础知识、std、第三方库和高级主题

DinS_Site 2018-06-30 05:10:40
因为本人是文科生,所以比较喜欢写东西,将一年多来编程中遇到的各种问题和总结经验分享出来,以供朋友们参考。
所有的主题可以看这张图:

粗略分成4大块:
1.基础知识。包括了数学、数据结构、算法、字符集相关内容、库和一小部分汇编。
2.std。c++语言层面提供的内容,包括容器、异常机制、文件读写套路、正则表达式、lambda表达式和多线程编程。
3.第三方库。涵盖了许多实用的技术,能够处理加解密、图片、视频、网络编程、c++中使用脚本以及游戏引擎。
4.高级主题。涉及到了数据库、并行编程、机器学习、OOP和一些思考。
我将所有具体内容放到了个人网站上,导航页是https://dins.site/navi-coding-chs/
具体文章列表(标题为英文的内容也为英文,标题为中文的内容也为中文):
Basics
| — Math
| — About Math
| — Calculus
| — Limit
| — Understanding Derivatives
| — Application of Differentiation
| — Antidifferentiation
| — Understanding Integrals
| — Application of Integration
| — Why Working at a 30-Minute Interval
| — Series
| — Sequence
| — Series
| — Convergence Test
| — Taylor Series
| — Linear Algebra
| — Probability
| — Algorithm
| — Big O Notation
| — Divide&Conquer – MergeSort as Example
| — Master Method
| — Randomization in Algorithm – QuickSort
| — Greedy Algorithm -Dijkstra Shortest-Path
| — Data Structure
| — About Data Structure
| — Vector
| — List
| — Stack
| — Queue
| — Priority Queue
| — Hash Table
| — Binary Tree
| — Binary Search Tree – Part A
| — Binary Search Tree – Part B
| — Splay Tree – Part A
| — Splay Tree – Part B
| — AVL Tree – Part A
| — AVL Tree – Part B
| — RedBlack Tree – Part A
| — RedBlack Tree – Part B
| — RedBlack Tree – Part C
| — Graph – Concept
| — Graph – BFS
| — Graph – DFS
| — Character Set
| — 字符集简史
| — 读取文本文件 – 没有你想象的那么容易
| — 字符集 – best practice
| — Assembly
| — 汇编基础
| — 函数调用过程——汇编的视角
| — Library
| — 静态库(lib)
| — 动态库(dll)
| — 带MFC的dll
| — 带MFC的lib


std
| — Container
| — c++的容器类
| — Exception
| — c++异常机制
| — File I/O
| — 如何写文本文件
| — 如何读文本文件
| — 如何读写二进制文件
| — Regex
| — 正则表达式 – 基础篇
| — 正则表达式 – 进阶篇
| — Lambda
| — 函数对象与lambda表达式
| — MultiThread
| — Windows多线程编程 – 基础
| — Windows多线程编程 – 互斥问题
| — Windows多线程编程 – 同步问题
| — 标准库多线程编程 – 基础
| — 标准库多线程编程 – 互斥问题
| — 标准库多线程编程 – 同步问题
| — c++异步调用机制


3rd Library
| — nlohmann::json
| — nlohmann::json概述与基础用法
| — nlohmann::json万能数据结构
| — Asio
| — socket概述
| — 服务器模式:阻塞+多线程
| — 服务器模式:非阻塞+轮询
| — 服务器模式:多路复用
| — asio环境搭建
| — asio基础使用方法
| — asio服务器模式:多线程或轮询
| — asio服务器模式:异步调用
| — http概述
| — 服务器环境搭建
| — AngelScript
| — AngelScript环境搭建
| — AngelScript框架介绍
| — AngelScript基础用法:注册函数
| — AngelScript进阶用法:在脚本中使用代码类
| — AngelScript进阶用法:在代码中使用脚本类
| — AngelScript高级概念:object handle与OOP
| — AngelScript SDK: dictionary讲解
| — 脚本与程序交互推荐方式:json解析
| — 脚本与程序交互推荐方式:json去格式化
| — Crypto++
| — crypto++环境搭建
| — crypto++框架介绍
| — 非对称加密算法之RSA
| — 散列算法之SHA
| — 对称加密算法之AES
| — GraphicsMagick
| — graphicsmagick环境搭建
| — 如何将gif逐帧分解
| — VLC
| — VLC环境搭建
| — VLC基础用法
| — 如何实现一个看上去是嵌入式视频的功能
| — Urho3d
| — 编译Urho3D库
| — Urho3D自建项目
| — Urho3D引擎框架
| — Urho3D数据结构
| — 初识子系统与场景模型
| — 事件与使用
| — 响应用户输入
| — 文字与国际化
| — 场景模型进阶-逻辑与脚本
| — UI研究
| — 场景模型进阶-切换场景
| — 2D场景概述
| — 2D场景-实现鼠标选中场景物体(一)
| — 2D场景-实现鼠标选中场景物体(二)
| — Cocos2dx
| — cocos2d-x萌新指南(零):新建项目
| — cocos2d-x萌新指南(一):图片、按钮
| — cocos2d-x萌新指南(二):音乐、帧动画
| — cocos2d-x萌新指南(三):场景与转换
| — cocos2d-x萌新指南(四):cocosstudio
| — cocos2d-x萌新指南(五):导入cocosstudio
| — cocos2d-x萌新指南(六):制作弹窗
| — cocos2d-x萌新指南(七):拖动图片


Advanced
| — Database
| — SQLite简介
| — Database Design – Basics
| — OpenMP
| — OpenMP简介
| — OOP
| — 我们为什么需要面向对象编程?
| — 数据抽象
| — 继承
| — 动态绑定/多态
| — OOP实例-水果商人(一)
| — OOP实例-水果商人(二)
| — 设计模式-创建型
| — 设计模式-结构型
| — 设计模式-行为型
| — OOP若干原则
| — OO建模
| — GUIFrame
| — 思考GUI框架:FOP和OOP
| — VsHMM框架
| — Machine Learning
| — Coming soon
| — Misc Thoughts
| — 注释三原则
| — 编程的政治哲学
| — 初心算法
| — 程序员与艺术家
| — 软件robust性思考


做个人网站属于兴趣爱好,也算留个纪念。虽说除了编程外还有其他内容,不过既然在csdn发帖,读者应该只对编程部分感兴趣,其他的随缘。

讲解尽量做到细致,并给出可操作的代码,同时假设读者没有相关背景知识,这也跟写论文的方法是一致的。所以对于老司机某些文章可能略显繁琐,跳读即可。后续随着研究深入还会继续更新。

希望能够帮到在c++领域奋斗的朋友们,少绕一些弯路。祝好!
...全文
233 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-06-30
  • 打赏
  • 举报
回复
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。

意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。

试对比
图书馆(对图书的分类够结构化了吧)

搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索)
哪个处理信息更方便、更高效。

所以
与其费劲去重构代码让其看上去更简洁、更合理
不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。

结构越复杂,越难修改,越难除错。
有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。

程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George

前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题;他觉得前同事们应该用这些问题来问自己;实际上不管在哪里工作的开发者们都应该经常问问自己这些问题:
◆“要保证这个问题不会再出现,我该怎么做?”
◆“要想少出些Bug,我该怎么做?”
◆“要保证Bug容易被修复,我该怎么做?”
◆“要保持对变化的快速响应,我该怎么做?”
◆“要保证我的软件的运行速度,我该怎么做?”
如果大多数团队都能不时问一下自己,必定会从中得益,因为这些都是真正强而有力的问题。
这是一门linux下c++通讯架构实战课程,针对c/c++语言已经掌握的很熟并希望进一步深造以将来用c++在linux下从事网络通讯领域/网络服务器的开发和架构工作。这门课程学习难度颇高但也有着极其优渥的薪水(最少30K月薪,最高可达60-80K月薪),这门课程,会先从nginx源码的分析和讲解开始,逐步开始书写属于自己的高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪的重要筹码。本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时的超长时间,所以老师会在课前先写好代码,主要的时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行的话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程的销售并造成其他同学的误解。 这门课程要求您具备下面的技能:(1)对c/c++语言掌握的非常熟练,语言本身已经不是继续学习的障碍,并不要求您一定熟悉网络或者linux;(2)对网络通讯架构领域有兴趣、勇于挑战这个高难度的开发领域并期望用大量的付出换取高薪;在这门课程中,实现了一个完整的项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如下几点:(1)项目本身是一个极完整的多线程高并发的服务器程序;(2)按照包头包体格式正确的接收客户端发送过来的数据包, 完美解决收包时的数据粘包问题;(3)根据收到的包的不同来执行不同的业务处理逻辑;(4)把业务处理产生的结果数据包正确返回给客户端;本项目用到的主要开发技术和特色包括:(1)epoll高并发通讯技术,用到的触发模式是epoll中的水平触发模式【LT】;(2)自己写了一套线程池来处理业务逻辑,调用适当的业务逻辑处理函数处理业务并返回给客户端处理结果;(3)线程之间的同步技术包括互斥量,信号量等等;(4)连接池中连接的延迟回收技术,这是整个项目中的精华技术,极大程度上消除诸多导致服务器程序工作不稳定的因素;(5)专门处理数据发送的一整套数据发送逻辑以及对应的发送线程;(6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等;

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧