c++
文章平均质量分 55
会不会依然想起我a
这个作者很懒,什么都没留下…
展开
-
c++和python string 的find()方法的返回值不同
c++ string::find()找不到返回String::npospython则返回-1原创 2017-11-17 17:11:08 · 467 阅读 · 0 评论 -
c++类和对象的探究(访问控制,构造和析构函数)
人们常说的面向对象的三个特征:封装,继承,多态;说到类,肯定能想到class关键字和struct关键字的区别:其实就是默认属性的访问权限不同,struct定义时,默认为public,class定义时,默认为private;那就首先说说类的封装吧:类的封装简单来说就是将属性和方法合成一个整体,并且可以设置访问权限(私有,公有,保护)然后介绍访问权限:public:公有,修饰的成员属性或者方法可以在类...原创 2018-07-04 23:51:10 · 136 阅读 · 0 评论 -
c++对象的初始化列表
有这么一种情况:如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数。简单说就是,有A,B两个类,B是A的一个成员变量,在初始化A的时候,需要将B也初始化。class A{public: A(int a){this->a=a}private:int a;...原创 2018-07-04 23:56:10 · 414 阅读 · 0 评论 -
c++中的new和delete
1.new和delete不是函数,是运算符,执行效率很高;2.虽然c++中也有malloc和free,区别在于,new和delete在对类操作执行时会分别调用类的构造和析构函数;下面举个例子说说用法吧:new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间...原创 2018-07-05 00:03:22 · 1076 阅读 · 0 评论 -
c++类的静态成员变量和静态成员函数
Ø 关键字 static 可以用于说明一个类的成员,静态成员提供了一个同类对象的共享机制Ø 把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员Ø 静态成员局部于类,它不是对象成员其实说白了,就是静态成员变量只有一份,该类定义的对象都共享这个变量下面说说静态成员函数:Ø 静态成员函数数冠以关键字staticØ 静态成员函数提供不...原创 2018-07-05 23:36:39 · 213 阅读 · 0 评论 -
c++this指针是个什么东西?
首先就先说说类对象的存储方式吧!C++类对象中的成员变量和成员函数是分开存储的: 普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式静态成员变量:存储于全局数据区中成员函数:存储于代码段中。肯定会有同学问,既然代码段是公用的,那么怎么区分是哪个对象调用的呢?其实,c++编译器对普通成员函数做了一个隐士的处理,偷偷的增加了一个指针,就是this指针,来确定是哪个对象...原创 2018-07-05 23:44:29 · 593 阅读 · 1 评论 -
c++ 友元函数和友元类
其实,简单理解,友元函数就是类的好朋友,使用friend关键字,这样友元函数就可以访问类的私有和protected成员变量了。Ø 若B类是A类的友员类,则B类的所有成员函数都是A类的友员函数Ø 友员类通常设计为一种对数据操作或类之间传递消息的辅助类 ...原创 2018-07-05 23:48:00 · 115 阅读 · 0 评论 -
c++运算符重载
所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。 运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大家都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行加法运算,如5+8, 5.8 +3.67等,其实计算机对整数、单精度数和双精度数的加法操作过程是很不相同的,...原创 2018-07-05 23:53:53 · 176 阅读 · 0 评论 -
c++的继承(看了一篇写的很全的文章)
继承概念类之间的关系has-A,uses-A 和 is-Ahas-A 包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。uses-A 一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。is-A 机制称为“继承”。关系具有传递性,不具有对称性。继承关系举例万事万物中皆有继承,是重要的现象...转载 2018-07-06 00:00:05 · 42960 阅读 · 5 评论 -
c++输入输出流
程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C++输入输出包含以下三个方面的内容: 对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。 以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称文件I/O。...转载 2018-07-12 23:20:23 · 2531 阅读 · 0 评论 -
C++STL(Standard Template Library) 标准模板库----1stl简要介绍
基本概念:STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。广义的来说,stl主要分为三部分:算法(algorithm),容器(container),迭代器(iterator),容器和算法可以通过迭代器来无缝的连接起来。而且模板库,几乎所有代码都使用了模板,这样可...原创 2018-07-12 23:30:18 · 327 阅读 · 0 评论 -
C++STL(Standard Template Library) 标准模板库----2容器介绍
容器的主要头文件是<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>,分别对应七种容器;可能直接说容器,有点茫然,简单来说:容器就是放东西的,只不过是存放某种特定(自己指定)的类型的数据;容器分为序列化容器:每个元素位置固定,取决于插入时间(vector,dequ原创 2018-07-12 23:36:41 · 125 阅读 · 0 评论 -
c++ vector的迭代器倒序遍历代码实现
//set或者vector的变量名是myvec//第一个元素是从end-1开始的,end指向的不是最后一个元素for(std::vector<int>::iterator it=myvec.end()-1;it>=myvec.begin();it--){ //处理逻辑自己定义,我这里自己直接输出了 cout<<*it<<end...原创 2018-07-30 11:50:15 · 18459 阅读 · 4 评论 -
c/c++ strcmp函数的源码
int _cdecl strcmp(const char* src,const char* dst) { int ret=0; while(!(ret=*(unsigned char*)src-*(unsigned char*)dst)&&*dst) ++src,++dst; if(ret<0) ...原创 2018-08-07 00:27:34 · 3237 阅读 · 0 评论 -
c/c++ strcat追加函数的实现
char * strcat (char *dest, const char *src) { //通过strcpy来实现strcat函数,这个函数的前提是dest分配的空间要能容纳src strcpy (dest + strlen (dest), src); return dest; } ...原创 2018-08-07 00:34:41 · 1048 阅读 · 0 评论 -
c++常用源代码以及常用库查找
我平时看代码主要是C和C++代码为主,Java代码也会偶尔看一下。平时除了自己积累一些代码之外,也会主动去寻找一些代码,比如说,(1)到sourceforge上查找相关代码;(2)到google code上面查找具体的代码;(3)到apache网站上寻找java的相关代码;(4)直接到开源项目网站上面寻找代码;(5)到csdn等网站下载代码,偶尔会有意外的收获;(6)到图书...转载 2018-10-17 12:23:48 · 3642 阅读 · 1 评论 -
排序算法----快速排序
排序算法的思路是通过一趟排序将数组分为两部分,一部分比另一部分都要小,以此递归即可得到最终的排序。复杂度nlognvoid Qsort(int a[], int low, int high)//low high代表最低的下标和最高的下标{ if(low >= high) { return; } int first = low;//将fi...原创 2018-10-24 23:58:45 · 158 阅读 · 0 评论 -
c++异常的简单介绍
语法:1) 若有异常则通过throw操作创建一个异常对象并抛掷。2) 将可能抛出异常的程序段嵌在try块之中。控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。3) 如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。4) catch子句按其在try块后出现的顺序被检查。匹配的catch子...翻译 2018-07-11 00:57:43 · 475 阅读 · 0 评论 -
c++的类型转换(用的较少,综合了几篇文章,大概写了一下)
C风格的强制类型转换(TypeCast)很简单,不管什么类型的转换统统是:TYPE b =(TYPE)a C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 static_cast 静态类型转换。如int转换成char reinterpreter_cast 重新解释类型 dynamic_cast ...原创 2018-07-11 00:46:12 · 107 阅读 · 0 评论 -
c++对c的主要扩展内容1
1.namespace命名空间:指定了标识符的可见范围,标准库的标识符使用using namespace std;2.register关键字加强,将变量放入寄存器内进行优化,c不能获取地址,c++可以,另外c++编译器针对某些情景有特定的优化方式,即不使用register,也有可能进行register优化3.struct关键字:c中的struct是变量的集合,但在c++中认为是一种新类型原创 2017-11-18 14:19:08 · 502 阅读 · 0 评论 -
c++对c的主要扩展内容2
1.引用:变量的另一个名字,可以直接操作某变量的内存空间,可替代指针,增强程序可读性,引用的实现原理:Type& name==》Type* const name这就代表了引用不能指向其他内存空间了,常见面试题:指针和引用区别:指针可以继续指向其他内存空间,而引用不可以,初始化就定死了;2.常引用:const Typr& name 这就表示内存空间不能被修改了,等价于c指针的con原创 2017-11-18 14:43:16 · 210 阅读 · 0 评论 -
迭代器前置式递增比后置式递增效率要高
后置式需要一个额外的临时对象,它必须存放迭代器的原本位置并将它返回。一般使用++itr,而不要使用itr++;前置的话先进行++,返回即可后置需要分配内存,来保存一个临时变量,在进行++,然后返回,相对来说性能低一些;详情看前置++和后置++的代码实现...原创 2017-11-15 12:55:42 · 787 阅读 · 0 评论 -
STL之--插入迭代器(back_inserter,inserter,front_inserter的区别)
除了普通迭代器,C++标准模板库还定义了几种特殊的迭代器,分别是插入迭代器、流迭代器、反向迭代器和移动迭代器,定义在头文件中,下面主要介绍三种插入迭代器(back_inserter,inserter,front_inserter)的区别。 首先,什么是插入迭代器?插入迭代器是指被绑定在一个容器上,可用来向容器插入元素的迭代器。 back_inserter:创建一个使用push_back的迭转载 2017-12-19 20:06:39 · 178 阅读 · 0 评论 -
vector resize 和reserve区别
主要弄明白capacity和size区别就可以了先看看《C++ Primer》中对resize()函数两种用法的介绍:1、resize(n) 调整容器的长度大小,使其能容纳n个元素。如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的元素。2、 resize(n,t)多一个参数t,将所有新添加的元素初始化为t。 而reserver()的用转载 2017-12-21 10:55:44 · 144 阅读 · 0 评论 -
找到了几篇介绍c/c++多进程和多线程以及协程的文章,感觉很不错
https://www.cnblogs.com/yuanchenqi/articles/6755717.html#_label1 多进程多线程http://blog.jobbole.com/93386/ 多进程多线程http://blog.csdn.net/lg1259156776/article/details/52732850 线程安全http://blog.cs原创 2017-12-21 11:15:23 · 584 阅读 · 0 评论 -
vector去重方法
1.排序以后使用unique()函数:unique函数比较的时相邻的两个元素,重复的放到vector尾部sort(vector.begin(),vector.end());vector.erase(unique(vector.begin(),vector.end()),vector.end());//unique()函数将重复的元素放到vector的尾部 然后返回指向第一个重原创 2017-12-25 19:31:34 · 8573 阅读 · 0 评论 -
复用stringstream清空缓冲区的方法
清空内容需要使用.str("")方法即,stringstream stream; ...... stream.str("")原创 2018-04-24 09:53:57 · 499 阅读 · 0 评论 -
c++各个数据类型转string
string 转 long 那必须是万年atoi(),不过得配合c_str()使用![plain] view plain copy#include <string> #include <iostream> #include <stdlib.h> using namespace std; int main () { string a = "12...转载 2018-04-21 13:09:19 · 982 阅读 · 0 评论 -
c++时间戳
自 1970 年 1 月 1 日以来经过的秒数:time_t time1 = time(0);//这里获取到的其实就是一个long类型的时间戳,是秒级别的,非毫秒级别 time_t time1 = time(0); cout << "time1 = " << time1 << endl;//1498122787 char * strTime...转载 2018-04-21 13:24:42 · 9533 阅读 · 0 评论 -
c++ boost库时间处理
概述使用date_time库需要在编译时加上"-lboost_date_time",而且需要包含以下头文件:处理日期的组件:#include <boost/date_time/gregorian/gregorian.hpp>处理时间的组件:#include <boost/date_time/posix_time/posix_time.hpp>date类date是date_t...转载 2018-04-21 13:26:26 · 999 阅读 · 0 评论 -
c++多态
c++的多态就是父类的函数写上virtual关键字,然后子类重写一个同名函数,在父类的调用处,如果传的是父类,就调用父类的函数,如果是子类,就调用子类的函数,总之就是同一个调用语句,不同的表现形式所以从上面看来,可以知道多态成立的条件有三:要存在父类和子类,父类要有虚函数,父类的指针或者引用时,传入子类。有关多态的实现原理,参考 C++编译器是如何实现多态Ø 当类中声明虚函数时,编译器会在类中生...原创 2018-07-09 23:56:18 · 145 阅读 · 0 评论 -
c++纯虚函数和抽象类
纯虚函数:一个在基类(注意是基类)中说明的虚函数,在基类中没有定义,需要在派生类中实现各自的版本定义。纯虚函数为各派生类提供了一个公共的接口,来更加方便的实现多态。 说明形式/格式:virtual 类型 函数名(参数)=0 //=0不能丢,有这个才算纯虚函数而抽象类就是含有纯虚函数的类就是抽象类,但是抽象类不能实例为对象。...原创 2018-07-10 00:01:09 · 104 阅读 · 0 评论 -
c/c++ 常见的标准库函数实现------strlen
int strlen(char *t){ int length = 0; if(t == NULL) return -1; while (*t != '\0') { t++; length++; } return length;} size_t strlen(const cha...原创 2018-07-16 23:49:02 · 727 阅读 · 0 评论 -
c/c++ 标准库函数实现 ------strcpy
如有错误,欢迎指正#include <stdio.h>#include <string.h>#include <stdlib.h>//先把大家都能考虑到的实现写一下吧char* strcpy1(char* dest,char* origin){if(dest==NULL ||origin==NULL) ...原创 2018-07-17 00:25:55 · 873 阅读 · 0 评论 -
c++模板(函数模板和类模板)
c++有两种模板机制:函数模板和类模板;模板机制就是把类型参数化,即给与一个虚拟的类型,再根据需要,在确定具体的类型;语法:函数模板:template <typename T>//T 类型 函数名(形参列表) { 业务逻辑语句 }调用实例: ...原创 2018-07-11 00:43:14 · 298 阅读 · 0 评论