C/C++语言
文章平均质量分 78
这个栏目下的文章是个人在学习和应用C/C++语言过程中遇到的一些有价值的问题以及个人对C/C++语言的理解和总结。
暂代
须知少日拿云志,曾许人间第一流。
展开
-
vector清空容器的操作以及个人的一些见解
当vector中存入大量的数据后,当我们不再使用vector中的元素后,如果能积极主动的去释放内存,那么是非常明智的。(对于小容量的数据,就没有这个必要了,因为对性能影响甚微)一、 知识背景:PS:这一部分是对文章题目所言操作的背景介绍,只关心题目的读者可以跳过为了支持随机访问,vector将元素连续存储到一块空间上(每个元素紧挨着前一个元素),那么当容器空间满了以后,再次插入新元素...原创 2019-04-17 22:46:44 · 981 阅读 · 0 评论 -
从源码到可执行文件(那些被隐藏了的过程)
1.预处理( 预处理器 cpp)对应Linux下的指令为: gcc -E file.c -o file.i此阶段的工作:完成条件编译的替换将#include引入的头文件包含进当前 文件替换宏常量,展开宏定义(#define)去掉注释保留#pragma2.编译(编译器 cc1)对应Linux下的指令为:gcc -S file.c -o file.s此阶段的工...原创 2018-06-30 07:19:38 · 865 阅读 · 0 评论 -
STL线程安全讨论
最近在回头看STL里面的实现,也在进一步研究高性能服务器编程方面的东西,就想到那STL在多线程情况下是否安全呢?记录STL是数据结构和算法的精妙实现,因此为了追求极致的效率,内部并没有给所有的操作加锁。对于STL的容器而言,只有下面这两种情况可以保证线程安全:多个线程同时读取同一个容器的内容多个线程同时写不同的容器其他的情况,比方说:多个线程同时读、写同一个容器。这就不是线程安全...原创 2018-11-21 00:43:24 · 1736 阅读 · 0 评论 -
Effective C++阅读笔记
Effective C++阅读笔记一、初始条款1:视C++为一个语言联邦C++支持多种风格的编程:面向过程编程面向对象编程函数式编程泛型编程元编程tip:不同类型的编程模式,遵循不同的高效编程准则即可条款2:尽量以const,enum,inline 替换 #define如果需要定义常量,请用const / enum 因为#define只是简单的文本替换,...原创 2018-07-26 15:35:43 · 366 阅读 · 0 评论 -
C++学习_友元
C++学习_友元友元友元函数 1.概念:在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。 2.特性:友元函数可以访问当前类中的所有成员(private ,public,protected) 注:: 如果某个全局函数要访问指定类的私有成员,则要在指定类...原创 2018-04-13 16:45:18 · 321 阅读 · 0 评论 -
C++学习_类和对象
类和对象 一般类的头文件名称和类名相同(见名知意) C++的作用域有四种:全局,局部,命名空间,类域。 C++中类可以实现封装,所谓封装,就是隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互,将数据和操作数据的方法进行有机结合的一种机制。一。两对比较写在前面C++中class和struct的区别? 1> class中成员的默认访问属性为priva...原创 2018-04-13 16:45:45 · 325 阅读 · 0 评论 -
C++学习_静态成员和const详解
C++学习_静态成员和const常量一。staticC语言中的static 1). 修饰函数 被修饰的函数只能在当前文件内使用,即改变了函数的链接属性2). 修饰变量延长了局部变量的生命周期改变了局部变量的存储位置(栈区->静态数据区(.data))改变了局部变量的初始值(0xccccccc->0x0000000)赋予函数内变量拥有“记忆”功能改变了局部变...原创 2018-04-20 14:17:49 · 467 阅读 · 0 评论 -
C++学习_运算符重载
运算符重载1.概念:赋予已经存在的,允许重载的运算符新的含义。2.不允许重载的运算符: ‘.’ 成员选择符 ‘::’域解析操作符 ‘?:’条件操作符 ‘.*’成员对象选择符3.注意:不能创建新的符号,只能重载C++中已经存在的,并且允许重载的运算符用于内置类型变量的操作符,其含义不可以改变,eg:‘+’就不可以改变其含义‘==’和‘!=’一般要成对重载前置自增 /...原创 2018-04-16 23:31:43 · 374 阅读 · 0 评论 -
常见内存泄漏问题
1.这个错误常见于代码行数比较多的时候int *p1 = (int *)malloc(sizeof(20));int *p2 = (int *)malloc(sizeof(50));//若干行代码p2 = p1;free(p1);free(p2);代码解析:p1和p2在开始都被指向了两块显式申请的堆内存,但是若干行代码后,由于粗心让p1指向的内容也赋给了p2,这就导致p2原来...原创 2018-04-24 14:50:18 · 427 阅读 · 0 评论 -
动态内存管理_C
一、函数介绍 以下四个函数都包含在头文件< stdlib.h >1.malloc 函数原型:void *malloc(size_t size); 作用:从堆空间申请内存 函数参数:需要申请的空间大小(字节数) 返回值:申请成功则返回一个指向申请到的内存的指针,失败则返回NULL2.calloc 函数原型:void *calloc(size_t num,siz...原创 2018-04-30 09:17:35 · 377 阅读 · 0 评论 -
浅拷贝以及其诸多解决方案
什么是浅拷贝呢? 我觉得根据代码来讲解这个问题,更容易理解浅拷贝的概念。 (以下第一段代码包含头文件,其他的均不包含,因为,这不是重点)代码:#include&lt;iostream&gt;#include&lt;string.h&gt;using namespace std;class String{public: String(const char* s = ...原创 2018-04-30 18:37:37 · 951 阅读 · 1 评论 -
C++学习_动态内存管理
C++内存管理附:C语言动态内存管理C++管理动态内存的操作符有两组: 1.new/delete new和delete的使用实例:class Test{public: Test()=default;}int main(void){ Test *t1 = new Test;//从堆申请一块Test大小的内存(自定义类型) int *t2 = ne...原创 2018-05-03 18:44:01 · 348 阅读 · 0 评论 -
C++学习_继承
OOP_C++_继承一、什么是继承?继承是面向对象程序设计(OOP)的核心思想之一。继承是让代码可以复用的重要手段之一,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。由基类产生出来的新类称为派生类。使用继承可以定义类似的类型并对其相似关系建模,有利于呈现面向对象程序设计的层次结构。 PS:上面这段话几乎囊括了所有C++书籍中对继承的解释,但是显然对于初学者而言,它不那么友...原创 2018-05-19 10:37:17 · 316 阅读 · 0 评论 -
C++学习_模板
引例:问题描述:怎样实现一个通用的加法函数?函数重载 函数重载可以手动针对不同的类型,编写相应的函数。但是它有下面这些缺陷:需要手动添加针对新类型的处理函数,比较麻烦代码复用率不高,像这个加法函数,仅仅数据类型不同,但是每一种类型都要编写类似的代码不能解决只有返回值不同的情况维护起来不方便,试想如果针对每种类型的函数代码都只有数据类型不同,那么这种方法出现问题需要修改,就得修...原创 2018-05-29 17:26:06 · 330 阅读 · 0 评论 -
解析Boost库智能指针(smart pointer)实现原理
引言:我们在写c++程序的时候,经常会因为忘记释放指针的资源从而导致内存泄漏,基于指针的这种缺陷,boost库中就提供了一种称之为“Smart Pointer”的类来解决这个问题,让程序自己控制已经不需要的资源的释放。后来”Smart Pointer”中的部分也移植到了c++标准库。下面这些smart pointer的设计思想都是:定义一个类来封装资源的分配和释放,在构造函数完成资源的分配...原创 2018-06-22 23:00:40 · 784 阅读 · 0 评论 -
简易计算器_两种方法
一、一般的方法#include<stdio.h>#include<windows.h>#pragma waring (disable:4996)//屏蔽由于scanf引发的警告int add(int x,int y){ return x+y;}int sub(int x,int y){ return x-y;}int mul(int x...原创 2017-11-17 16:42:24 · 540 阅读 · 0 评论 -
c语言_通讯录(初级版)
这是一个简单的通讯录(实现方案是初级版,并且只能在程序运行期间存在(没有写入文件))(以后还会写一个用动态内存分配+实现文件存储的版本)代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<Windows.h>#pragma warning(dis...原创 2017-11-27 21:23:28 · 1498 阅读 · 0 评论 -
C语言知识深度汇总(本文仅谈语言,且不适合初学者阅读)
修正的部分内容的索引放在这里进行说明: 第一次修正:关于自定义类型那里进行了部分内容的修正 第二次修正: 1.对语句部分进行了大程度的修正 2.对数组部分进行了大程度的修正 3.补上了位段的一系列操作 4.对文章中的一些地方进行了小幅度修改(使之更严谨,更容易阅读理解) 第三次修正: 1.增加了文件操作部分的内容 2.对文章中的一些地方进...原创 2018-02-21 09:34:00 · 5530 阅读 · 14 评论 -
c语言_通讯录(非初级版)
之前说写一个改良版的通讯录,一直没有时间来写,下面我就讲一下这个要怎么写,只要跟着我的思路,相信你读完一定会有所收获(大佬请忽视这句话-.-!) 这个版本的通讯录是一个动态的版本并且会加上文件操作,解释一下这句话就是 这个版本的通讯录可以“无限”的增加联系人的信息(只要你的外存足够大),并且 可以将联系人的信息保存在外存而不是内存上,下次打开这个程序还可以读取以前 ...原创 2018-06-25 21:52:24 · 442 阅读 · 0 评论 -
C/C++_测试函数的运行时间
目前,存在着各种计时函数,它们的计时方式大都是下面这样的: 下面对这些计时函数做一个汇总,以供以后方便查阅: 方法1,time()包含在&lt; time.h &gt;中,用于获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个long int类型,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNI...原创 2018-04-09 17:28:11 · 3080 阅读 · 0 评论 -
C++学习_函数重载和默认参数
C++ 学习_函数重载和默认参数 我为什么要写C++系列博文呢?理由很蛋疼,因为C++的语法太庞杂了,从目前来看,后面我很难有精力和能力来总结一篇令我满意的”C++语法汇总”,所以干脆放弃那样做,将我学习的过程记录下来,这样写出来的东西包含的知识也比较全面。不过,由于我是学习的过程,所以在文章中难免有一些错误或者疏漏之处,希望大家不嫌麻烦的可以指出我的错误,本人会在第一时间修正该系列内容!...原创 2018-04-13 16:46:19 · 476 阅读 · 0 评论 -
C++学习_引用和命名空间
引用一。写在前面: 1. 引用的特性:引用在定义的时候必须初始化,并且只能“从一而终”。一个变量可以有多个引用(通常实体的声明周期比引用的声明周期长)2.编译器不会为引用分配内存空间,它和它引用的变量共同使用同一块内存空间二。常引用 注:这里指的是左值引用两种类型: - const 类型& 引用变量名 = 实体变量名; - const 类型&...原创 2018-04-13 16:46:51 · 454 阅读 · 0 评论 -
C++学习_this指针_构造和析构
一。this指针1> this指针作为成员函数参数传参this指针是编译器在调用类非静态成员函数的时候隐式传递给函数的(作为第一个参数),在传递this指针的时候有两种方式: 调用约定一般规定以下几个方面的内容: 1) 函数参数的传递方式,是通过栈传递还是通过寄存器传递 2) 函数参数的传递顺序,是从左到右入栈还是从右到左入栈。 3) 参数弹出方式。函数...原创 2018-04-13 16:44:41 · 460 阅读 · 0 评论