C++
文章平均质量分 71
李恩泽
敬畏耶和华是智慧的开端;认识至圣者便是聪明(箴九10)。我不是依靠自己的小聪明,我要专心仰赖耶和华,做一个技术的极客!
展开
-
C++基类和派生类私有、保护、公有成员访问控制以及动态绑定、三种继承
1.类的一个特征就是封装,public和private作用就是实现这一目的。所以:用户代码(类外)可以访问public成员而不能访问private成员;private成员只能由类成员(类内)和友元访问。private不能被继承,不能被子类的成员函数访问。2.类的另一个特征就是继承,protected的作用就是实现这一目的。所以:protected成员可以被类成员和友元访问,原创 2017-03-01 09:11:37 · 2977 阅读 · 0 评论 -
C++ STL之map和multimap用法
一. Map与 Multimap 特点Map 和 Multimap 将(key/value) 一组当做元素,它们可以根据 key 的排序准则自动将元素排序。Multimap允许重复元素,map不允许重复。类型定义:[cpp] view plaincopytypedef std::mapfloat, std:原创 2017-03-07 10:11:52 · 11396 阅读 · 0 评论 -
C++的find和find_if函数
一、find()算法[cpp] view plain copy print?templateclass InputIterator, class T> InputIterator find ( InputIterator first, InputIterator last, const T& value ) {转载 2017-03-10 10:25:30 · 14487 阅读 · 0 评论 -
C++的count和cout_if函数
count_if函数原型如下:[cpp] view plain copy print?templateclass _InIt, class _Pr> inline typename iterator_traits::difference_type count_if(_InIt _First, _InIt _Last原创 2017-03-10 08:55:20 · 4258 阅读 · 0 评论 -
C++的substr函数的用法
C++中substr函数的用法#include#includeusing namespace std;main(){string s("12345asdf");string a=s.substr(0,3); //获得字符串s中 从第0位开始的长度为3的字符串//默认时的长度为从开始位置到尾cout<<a<<endl;}输出结果为:123原创 2017-03-10 08:59:50 · 463 阅读 · 0 评论 -
C++的STL之search_n
C++STL的非变易算法(Non-mutating algorithms)是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。 重复元素子序列搜索search_n算法:搜索序列中是否有一系列元素值均为某个给定值的子序列,它有如下两个函数原型,分别在迭代器区间[first, last)上搜索是否有count个连续元素,其值均等于valu转载 2017-03-10 10:54:26 · 501 阅读 · 0 评论 -
C++ 引用计数技术及智能指针的简单实现
阅读目录1.智能指针是什么2.普通指针存在的问题3.什么是引用计数4.智能指针实现4.1.基础对象类4.2.辅助类4.3.为基础对象类实现智能指针类4.4.智能指针类的使用与测试5.智能指针类的改进一6.智能指针改进二 正文一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧)。最近花了点时间认真看了智能指针,特转载 2017-02-26 15:11:02 · 395 阅读 · 0 评论 -
STL算法replace,replace_if,replace_copy.replace_copy_if
所有容器适用replace(b,e,ov,nv) //把oldvalue替换成newvaluereplace_if(b,e,p,v) //把符合p条件的替换成vreplace_copy(b1,e1,b2,ov,nv)replace_copy_if(b1,e1,b2,p,v)[cpp] view plain copy原创 2017-03-18 10:00:40 · 446 阅读 · 0 评论 -
C++深拷贝和浅拷贝
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2017-02-25 11:40:09 · 277 阅读 · 0 评论 -
析构函数
创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存、关闭打开的文件等,这个函数就是析构函数。析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符号。注意:析构函原创 2017-02-25 10:31:04 · 352 阅读 · 0 评论 -
C++的STL之set/multiset
集合使用set或multiset之前,必须加入头文件Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。sets和multiset内部以平衡二叉树实现1. 常用函数1) 构造函数和析构函数set c:创建空集合,不包含任何元素set原创 2017-03-07 11:03:43 · 234 阅读 · 0 评论 -
C++之STL bitset
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:[cpp] view plain copy转载 2017-03-11 22:16:16 · 338 阅读 · 0 评论 -
C++的STL之find_first_of
find_first_of //找第一个符合条件的位置find_last_of //找最后一个符合条件的位置转载 2017-03-12 15:34:47 · 556 阅读 · 0 评论 -
STL算法,堆排序
/*****************************************STL-算法--Heap算法堆排序算法 (heapsort)make_heap() //把容器内的数据做堆排序push_heap() //向堆内放入元素pop_heap() //删除堆顶元素sort_heap() //把堆原创 2017-03-17 09:10:03 · 1600 阅读 · 0 评论 -
STL算法之sort和stable_sort
1.stable_sort 和 sort的区别在于 前者作排序可以使原来的"相同"的值在序列中的相对位置不变如 1 4 6 7 4' (4 和 4'值相等,加上' 表示是2个元素)那么stable_sort能保证排序完 4 仍然在4' 前 也就是输出1 4 4' 6 7;但是sort 没有这个功能,算法不能保证这一点2.在标准算法中的一部分算法 如果这个算法默认使用的是原创 2017-03-15 09:35:37 · 1561 阅读 · 0 评论 -
STL算法排列
《C++ Primer》//所有容器适用next_permutation(b,e) //下一个排列-----从小到大 返回值false,表示没有下一个next_permutation(b,e,cp)prev_permutation(b,e) //上一个排列-----从大到小 返回值true,表示还有下一个prev_permutation(b,原创 2017-03-14 09:28:20 · 187 阅读 · 0 评论 -
STL算法reverse,reverse_copy
/**------http://blog.csdn.net/u010579068------**/ #include #include #include #include #include #include #include using namespace std; /***************************************** /原创 2017-03-14 09:15:01 · 325 阅读 · 0 评论 -
C++ STL算法transform
参考:《C++ Primer》以及教学视频所有容器适用transform(b1,e1,b2,op) //把一个区间[b1,e1)内的数据经过(op)转化,放入第二个容器内 //也就是复制+修改(变换) 当然b2可以等于b1transform(b1,e1,b2,b3,op)原创 2017-03-13 10:02:05 · 614 阅读 · 0 评论 -
C++的STL算法for_each
for_each()函数将调用者提供的操作施加于每一个元素身上。它既可以是非变动性算法,也可以说是变动性算法。[cpp] view plain copy print?template class InputIterator, class Function> Function for_each (InputIterator firs原创 2017-03-13 09:10:38 · 455 阅读 · 0 评论 -
函数对象
一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子:[cpp] view plain copyclass FuncObjType { public: void operator() () { c原创 2017-03-13 09:08:14 · 200 阅读 · 0 评论 -
C++STL算法lower_bound、upper_bound、equal_range
参考《C++ Primer》//所有容器适用(O(log(n))) 已序区间查找算法lower_bound() //找第一个符合的元素,返回位置迭代器,返回val出现的第一个位置upper_bound() //找最后一个符合的元素,返回位置迭代器,返回Val出现的最后一个位置的下一个位置equal原创 2017-03-12 17:22:04 · 821 阅读 · 0 评论 -
C++的STL的binary_search()和includes()
所有容器适用(O(log(n))) 已序区间查找算法binary_search //二分查找,返回bool值,includes //包含查找,返回bool值。#include #include #include #include #include using namespace原创 2017-03-12 16:15:36 · 616 阅读 · 0 评论 -
C++之模板priority_queue
从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维的一致性导致的。今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中扒出了它的实现代码,大家可以参考一下。首先函数在头文件中,归属于命名空间std,使用的时候需要注意。队列有两种常用的声明方式:s转载 2017-03-04 11:26:51 · 750 阅读 · 0 评论 -
C++之STL--queue模板类
queue与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。可选的容器类型有queue,list,但是不能用vector;queue的核心接口主要由成员函数push(),front(),back(),pop()构成;push():会将一个元素置入queue中;转载 2017-03-04 11:10:18 · 2252 阅读 · 0 评论 -
C++List模板类的使用
List的使用在使用list必须包括头文件#include 如何定义一个list对象[cpp] view plain copy #include int main (void) { listchar > cList; //声明了list模板类 的一个实例 } 使用list的成员函数push_back和push_front插入一个元素到list中转载 2017-03-04 10:11:12 · 1574 阅读 · 0 评论 -
指针的指针和指针的引用
1,使用指针的指针和指针的引用的原因当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递。如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来的值。我们用下边的代码说明一下问题:int m_value = 1;void func(int *p){ p = &m_value;}in原创 2017-02-13 11:38:57 · 369 阅读 · 0 评论 -
交换两个数据的方法
第一种: //加入类型声明,类似于C++中的泛型,但要小心使用#define SWAP(type,a,b){type tmp; tmp=a; a=b; b=tmp;}第二种 //异或运算法采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量: a = a ^ b; b = a ^ b; a = a ^ b;这个交换两个变量而无原创 2017-02-10 16:40:38 · 762 阅读 · 0 评论 -
sizeof用法介绍
摘要:Sizeof的作用非常简单:求对象或者类型的大小。然而sizeof又非常复杂,它涉及到很多特殊情况,本篇把这些情况分门别类,总结出了sizeof的10个特性:(0)sizeof是运算符,不是函数;(1)sizeof不能求得void类型的长度;(2)sizeof能求得void类型的指针的长度;(3)sizeof能求得静态分配内存的数组的长度!(4转载 2017-02-11 17:05:31 · 882 阅读 · 0 评论 -
C++中前++和后++的重载
More Effective C++ NO.6 笔记:++i 与 i++,前置与后置“重载运算符"的区别[cpp] view plain copy // 前置++i -----------先++,再调用(一致) UPInt& UPInt::operator++() { *this += 1; return原创 2017-02-28 11:06:17 · 2689 阅读 · 0 评论 -
const int *p和int * const p的区别(常量指针与指向常量的指针)
对于指针和常量,有以下三种形式都是正确的:const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * const myPtr = &char_A;//指向常量的常量指针 下面依次对这三种类型进行介绍。因为*操作符是左操作符,左操作符的优先级是从右到左,对于1.常量指针(Cons转载 2016-09-15 15:30:58 · 4529 阅读 · 0 评论 -
C++中静态成员变量
静态成员函数,虚函数,内联函数,构造函数,析构函数等的区别与联系,面试时候经常问。C语言中static的语义。参考点击打开链接1.static变量:1).局部a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋转载 2016-10-23 16:46:27 · 297 阅读 · 0 评论 -
C++字符输入
cin: cin使用空白(空格、制表符和换行符)来确定字符串的结尾位置,所以cin在获取字符数组输入时只读取一个单词。读取一行字符串输入: iostream中的类如cin,提供了一些面向行的类成员函数:getline()和get(),这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入队列中。 getline(): 调用方法cin原创 2016-09-16 15:09:30 · 322 阅读 · 0 评论 -
让我们彻底搞懂C/C++函数指针吧(三)
转载:http://hipercomer.blog.51cto.com/4415661/7923023.6 使用函数指针数组函数指针有意思的地方在于,它使用从0到n-1这个n个连续的整数下标直接映射到函数上。 和前面一样,我们也是类比着定义普通指针数组来定义函数指针数组。首先,考虑一个浮点数指针数组,数组的长度为10.我们都知道用下面的形式来定义: float * pFloatArray[10]转载 2016-09-17 15:59:00 · 431 阅读 · 0 评论 -
让我们彻底搞懂C/C++函数指针吧(二)
转载 http://hipercomer.blog.51cto.com/4415661/7923012.4 函数指针作为参数如果你已经明白了函数的参数机制,而且完全理解并实践了3.3节的内容,这一节其实是很简单的。只需要在函数的参数列表中,声明一个函数指针类型的参数即可,然后再调用的时候传给它一个实参就可以了。你可以这么想象,就是把函数指针的赋值语句的等号换成了形参和实参结合的模式就行。 下面给一转载 2016-09-17 15:13:09 · 397 阅读 · 0 评论 -
传递动态内存
1、如果函数的参数是一个指针,不要用该指针去申请动态内存#include using namespace std;void GetMemory(char *p,int num){ p=(char *)malloc(sizeof(char) * num);}void Test(void){ char *str=NULL; GetMemory(str,100原创 2017-02-13 14:20:35 · 190 阅读 · 0 评论 -
C++继承与转换
理解基类类型和派生类之间的转换,对于理解面向对象编程在C++中如何工作非常关键。每个派生类对象都包含了一个基类的部分,这意味着可以像使用基类对象一样在派生类对象上执行操作。因为派生类对象也是基类对象,所以存在从派生类对象的引用到基类对象引用的转换,对指针类似。基类类型对象既可以作为独立部分存在,也可以作为派生类对象的一部分而存在,因此一个基类对象可能也可能不是派生对象的部分,结果没有从转载 2017-03-02 09:10:06 · 1523 阅读 · 0 评论 -
C++中static变量与继承
1. 父类的static变量和函数在派生类中依然可用,但是受访问性控制(比如,父类的private域中的就不可访问),而且对static变量来说,派生类和父类中的static变量是共用空间的,这点在利用static变量进行引用计数的时候要特别注意。 2. static函数没有“虚函数”一说。因为static函数实际上是“加上了访问控制的全局函数”,全局函数哪来的什么虚函数?转载 2017-03-02 10:09:10 · 2393 阅读 · 0 评论 -
双端队列--Deque 容器
deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容。deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是,deque还支持从开始端插入数据:push_front()。使用deque容器之前必须加上头文件:#include; deque属转载 2017-03-04 09:11:03 · 228 阅读 · 0 评论 -
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静转载 2017-02-24 14:11:08 · 535 阅读 · 0 评论 -
指针和引用的区别,堆和栈的区别
指针和引用的区别1,引用不可以为空,指针可以为空。2,引用不可以改变指向,指针可以改变指向。虽然引用不可以改变指向,但是可以改变初始化的内容;3,sizeof()操作引用得到的是所指向变量的大小,而sizeof()指针,得到的是指针本身的大小,即4个字节;4,引用比指针更安全,在使用引用前不需要测试它的合法性。而指针则总是被测试,防止为空。堆和栈的区别简述为:1原创 2017-03-03 15:44:14 · 2647 阅读 · 0 评论