C/C++
文章平均质量分 83
Hansry
我希望能有个明亮的落地窗,每天都晒一晒太阳。。。
展开
-
C++11 之emplace_back 与 push_back的区别
C++ 开发中我们会经常用到插入操作对STL的各种容器进行操作,比如vector,map,set等。在引入右值引用,移动构造函数,移动赋值运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)时,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中,原来的临时变量释放,这样造成的问题就是临时变量申请资源的浪费。引入了右值引用,移动构造函数后...原创 2019-11-19 22:15:43 · 369 阅读 · 0 评论 -
Linux 下的多线程编程
1.引言线程技术在60年代就被提出了,传统的Linux也支持线程的概念,但是在一个进程中只允许有一个线程,这样子多线程意味着多进程。为什么要引入线程的概念? 1. 使用多线程的理由之一是和进程相比: 在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段。而运行一个进程中的多个线程,它们彼此使用相同的地址空间,共享大部分数据,且启...转载 2018-05-21 19:27:05 · 292 阅读 · 0 评论 -
C++逻辑设计——组件架构
原创 2018-05-08 18:35:21 · 1974 阅读 · 0 评论 -
LeetCode 2 俩数相加 (链表)
何为链表?链式存储的线性表,简称链表。链表由多个链表元素组成,这些元素称为结点。结点之间通过逻辑连接,形成链式存储结构。存储结点的内存单元,可以是连续的也可以是不连续的。逻辑连接和物理存储次序没有关系。链表分为俩个域:a.值域:用于存放结点的值b. 链域:用于存放下一个结点的地址或者位置从内存角度出发:链表可分为静态链表和动态链表。从链表存储方式的角度出发:链表可分为单链表、双链表、以...原创 2018-10-04 16:53:58 · 248 阅读 · 0 评论 -
Leetcode29-俩数相除 — & (与运算)、|(或运算)、^(异或运算)的本质理解
位与运算符(&)参加运算的俩个数据,按二进制位进行"与"运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:俩位同时为"1", 结果才为“1”, 否则为0例如:3&原创 2018-10-06 12:02:43 · 1863 阅读 · 0 评论 -
构造函数私有化
通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?没错,我也知道这将会使构造函数成为私有的,这意味着什么?1. 我们知道,当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访问私有成员,所以这将导致编译出错。2...转载 2019-08-04 12:54:28 · 664 阅读 · 0 评论 -
C++中的inline用法
1.引入inline关键字的原因在c/c++中,为了解决一些频繁调用的小函数,即不断地有函数入栈,即函数栈,大量消耗 栈空间(栈内存) 的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据 (也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间...转载 2019-08-05 14:42:14 · 298 阅读 · 0 评论 -
容器(vector)、数组、new创建的动态数组,哪个执行效率更高些?
一.理论分析1.1堆和栈的区别栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量等。其操作方式类似于数据结构中的栈。堆区(heap)— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是俩回事,分配方式倒是类似于链表。全局区(静态区)(static) — 全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量在一块区域,...转载 2020-02-07 16:49:28 · 3906 阅读 · 1 评论 -
二叉搜索树、平衡二叉搜索树和红黑树
一. 二叉搜索树(Binary Sort Tree)二叉搜索树,又称为二叉排序树(二叉查找树),它或许是一棵空树,或许是具有一下性质的二叉树:1.若它的左子树不为空,则左子树上所有的节点的值小于根节点的值2.若它的右子树不为空,则右子树上所有的节点的值都大于根节点的值3.它的左右子树也分别是二叉搜索树二叉搜索树的这种特性,使得我们在此二叉树上查找某个值就很方便了,从根节点开始,若要寻...转载 2019-11-27 20:48:02 · 1419 阅读 · 0 评论 -
C++物理设计——组件
逻辑实体:诸如类和函数,为“皮肉”; 物理结构:“骨架”; 逻辑实体分布于许多物理实体,诸如文件和目录中。对于逻辑关系,一般有以下三种: 1.组件是物理设计的最小单位类、函数、枚举等都是组成这些组件的逻辑实体。特别的是,每个类定义都刚好只驻留在一个组件中。1) 一个组件刚好由一个头文件(.h) 和 一个实现文件(.c) 构成。 一个组件通常定义一个或者多个密切相...原创 2018-05-07 19:54:48 · 1342 阅读 · 0 评论 -
大规模C++程序设计基本设计规则
1.保持数据成员私有。2.避免在文件作用域内包含带有外部链接的数据。 文件作用域中带有外部链接的数据,与存在于其他编译单元中的全局变量有冲突的危险。全局变量将对象和代码绑在一起,使得在其他程序中几乎不能选择性地重用编译单元。简单将这些变量非全局化: (1) 将所有全局变量放入一个结构中; (2) 然后将他们私有化并添加静态访问函数。假设我们有以下全局变量:int size...原创 2018-05-05 23:30:00 · 2006 阅读 · 0 评论 -
C++声明与定义、内部链接与外部链接的意义
一. 声明与定义A. 大多数情况下,声明与定义是相同的,但是有少些情况下,声明并非定义,而定义又非声明: 1.是声明,但是并不是定义:1) 声明了一个没有具体说明函数体的函数; void declaration(int a,int b);2) 包含了一个extern说明符,并没有初始化或函数体;Extern int number;3) 它是一个类定义内的静态类数据成员的声明; ...原创 2018-05-05 16:39:24 · 3357 阅读 · 1 评论 -
ubuntu下qt debug一直处于lauching Debugger(启动debugger)
Linux下使用QT,终端不显示输出的解决办法 QT默认终端设置:工具–选项–环境 为“x-terminal-emulator -e”,需要修改为”/usr/bin/xterm -e”,这是Ubuntu的一个BUG(Bug #566387)。lauching Debuggerdebug的一些快捷键:调试 F5(Debug)停止调试 Shift+F5单步跳过 F10单步进入 F11单步跳出 S转载 2017-08-18 17:04:10 · 3173 阅读 · 0 评论 -
C++ 文档读取
假设有一个叫 data.txt 的文件, 它包含以下内容: Fry: One Jillion dollars.[Everyone gasps.]Auctioneer: Sir, that's not a number.数据读取, 测试 。以下就是基于 data.txt 的数据读取操作:#include <iostream>#include <fstream>#include <string转载 2017-08-12 22:22:18 · 802 阅读 · 0 评论 -
面向对象(一)——类
1.类的结构如下:class class_name{ //类名称,用户定义的 public://public成员,任何看到这个类的都可以使用该成员 member1;//可以是函数,也可以是数据private://只有同一个class的其他成员或者该class的友元/friend class才能访问 member2;......protect:原创 2017-08-30 09:36:01 · 491 阅读 · 0 评论 -
面向对象(二)——操作符重载 & 关键字this & 静态成员static
1.要想重载一个操作符,我们只需要编写一个成员函数,名为operator,后面跟我们要重载的操作符,遵循一下原型定义:type operator sign(parameters);//如CVector operator+(Cvector); 即函数operator+返回值类型的值#include <iostream>using namespace std;class Cadd{public:原创 2017-08-30 09:43:59 · 369 阅读 · 0 评论 -
面向对象(三)——友元函数和友元类
1.友元函数类里面分别有三个内部保护:分为public、protected和private,但是外部函数只能访问到public的内容,而protected(友元函数和子类)和private(友元函数)通过友元函数访问,关键字friend。我们可以允许一个外部函数获得访问class的protected和private的能力。为了允许一个外部函数访问class的private和protected成员,必原创 2017-08-30 09:52:16 · 559 阅读 · 0 评论 -
面向对象(四)——继承
1.类之间的继承类的一个重要的特征是继承,这使得我们可以基于一个类生成另外一个类的对象,以便使后者拥有前者的某些成员,再加上自己的一些成员。由其他类引申而来的子类继承基类的所有可视成员。意思是说,如果一个基类包含成员A,而我们将它引申为另一个包含成员B的类,这个子类同时包含A和B 定义一个子类,必须在子类的申明中使用冒号操作符“:”,如下所示: class derived_class : pub原创 2017-08-30 09:55:19 · 388 阅读 · 0 评论 -
面向对象(五)——类的多态
1.基类的指针(请注意,指针的赋值是需要同类型地址的)继承的好处是一个指向子类的指针与一个指向基类的指针是类型兼容的(type-compatible) 继承的好处是一个指向子类的指针与一个指向基类的指针是type-compatible的,如以下代码所示:#include <iostream>using namespace std;class Cfather{protected: in原创 2017-08-30 15:04:10 · 424 阅读 · 0 评论 -
C++11多线程并发中的std::thread、std::mutex和std::future
C++11 新标准中引入了五个头文件来支持多线程编程:<atomic>,<thread>,<mutex>,<condition_variable> 和 <future><atomic>: 该文件主要申明了俩个类,std::atomic 和 std::atomic_flag,另外还声明了一套 C 风格的原子类和与C兼容的...原创 2019-08-30 15:01:37 · 2007 阅读 · 0 评论 -
what(): Enable multithreading to use std::thread: Operation not permitted
在linux 使用 C++11 thread 使会出现以下问题:Starting: /home/hansry/Code/Algorithm_design/chess/bin/chessterminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to us...原创 2018-03-14 21:03:33 · 1218 阅读 · 0 评论 -
C++逻辑设计——函数设计之函数接口说明
1.函数接口说明在C++中指定函数接口时,一些必须要解决的问题有:(1) 运算符函数还是非运算符函数? (2) 自由运算符还是成员运算符? (3) 虚函数还是非虚函数? (4) 纯虚成员函数还是非纯虚成员函数? (5) 静态成员函数还是非静态成员函数? (6) 常量成员函数还是非常量成员函数? (7) public、protected 还是 private 成员函数? (8)...原创 2018-05-09 00:54:34 · 7700 阅读 · 0 评论 -
C++中的static
static分为面向过程程序设计的static和面向对象的static,前者用于普通变量和函数,不涉及类,后者说明了static在类中的作用。面向过程静态全局变量 在全局变量前面加static,如下:#include<iostream>usingnamespace std;void fn(); //声明函数static int n; //--声明静态全局变量--void main()原创 2017-08-16 15:57:43 · 867 阅读 · 0 评论