
C++与STL
文章平均质量分 64
故常无-欲以观其妙
行胜于言
展开
-
Java表格仿mysql实现基本操作(连接,分组排序,统计等)
Java表格仿mysql实现基本操作(连接,分组排序,统计等)原创 2017-07-30 23:40:35 · 1097 阅读 · 0 评论 -
关于仿函数-C++
一,概述 仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。 有些功能的的代码,会在不同的成员函数中用到,想复用这些代码。 1)公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全转载 2016-09-07 22:50:33 · 379 阅读 · 0 评论 -
C++虚函数表
解析C++的虚函数表 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方转载 2016-08-01 00:04:19 · 273 阅读 · 0 评论 -
memset初始化值的效率高于or循环
在一亿数据的赋值下,memset使用了1ms,而for循环使用了136ms贴上代码:#include #include #include #include #define MAXSIZE 10000using namespace std;#include #include int get_time(string r){原创 2016-04-29 13:04:04 · 5782 阅读 · 0 评论 -
int,float,double的边界值
关于limit头文件的所有内容参看c++ reference http://www.cplusplus.com/reference/limits/numeric_limits/?kw=numeric_limits在编程中我们常会遇到扫描求得一个序列的最大值或者最小值的情景,这个时候往往需要给相应的变量附上边界值,确保在任何情况下求得目标值正确。而limits这个头文件是包含了相应的宏定义的,当然如原创 2016-06-05 20:47:28 · 2913 阅读 · 0 评论 -
函数重载(最高层有多个匹配函数找到,调用将被拒绝)
函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题1、声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using就是一种解决命名冲突的方法,解决命名冲突还有很多其它的方法,这里就不论述了)2、当我们调用一个重载的函数时,又是如何去解析的?(即怎么知道调用的是哪个函数转载 2016-06-11 19:59:53 · 2087 阅读 · 0 评论 -
野指针--内存泄漏--缓存区溢出--栈溢出
最近在腾讯,百度等的面试中被问道了上面几个问题,我这人一碰到笔试面试什么鬼的就是紧张,然后就乱说话了其实很多东西我知道,只是表达不清,今天梳理一下用自己的语言来描述下这些概念:1.野指针比如说吧:int main(){ int *a=new int[6]; a[2]=99; int *b =a; cout cout原创 2016-05-03 22:03:06 · 731 阅读 · 0 评论 -
关于函数适配器less< Type>以及bind1st和bind2nd的使用
标准库定义了一组算术,关系与逻辑对象类,另外还定义了一组函数适配器 在functional头文件中: plus< Type> minus< Type> negate< Type> not_equal_to< Type> logical_not< Type>….等等 包括算术、关系、逻辑对象类型sort(svec.begin(),svec.end(),greater< string>()原创 2016-05-23 22:45:53 · 618 阅读 · 0 评论 -
考察细心程度
找出以下程序不足的地方,考察习惯和细心程度char findChar(char * s, char ch){ for (i = 0; i <= strlen(s); i++){ if (s[i] = ch) return s[i]; } }原创 2016-06-25 23:19:06 · 665 阅读 · 0 评论 -
C++成员函数的存储方式
用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如图8.4所示。图8.4 能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如图8.5所示。转载 2016-10-10 23:18:45 · 292 阅读 · 0 评论 -
C++空类为何占一个字节
深度探索c++对象模型say:那个字节被编译器插进去的一个char ,使得这个class的不同实体(object)在内存中配置独一无二的地址。那么也就是说这个char是用来标识类的不同对象的那么为啥是一个字节,我的理解是字节是最小单位了,省内存,只要标志不同对象就可以,置为空就没法标志不同对象了原创 2016-10-10 23:21:14 · 583 阅读 · 0 评论 -
红黑树插入删除操作
R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子转载 2016-09-26 15:42:51 · 2850 阅读 · 0 评论 -
红黑树原理
(01) 红黑树(一)之 原理和算法详细介绍(02) 红黑树(二)之 C语言的实现(03) 红黑树(三)之 Linux内核中红黑树的经典实现(04) 红黑树(四)之 C++的实现 (05) 红黑树(五)之 Java的实现(06) 红黑树(六)之 参考资料 R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,转载 2017-04-12 19:16:02 · 523 阅读 · 0 评论 -
C语言高效编程与代码优化
在本篇文章中,我收集了很多经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。简介在最近的一个项目中,我们需要开发一个运行在移动设备上但不保证图像高质量的轻量级JPEG库。期间,我总结了一些让程序运行更快的方法。在本篇文章中,我收集了一些经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。尽管在C代码优转载 2017-03-13 16:11:08 · 5914 阅读 · 0 评论 -
java基础面试题
3.1.1 Java基础此时一般会问到一些Java的基础知识,比如synchronized static修饰类和方法有什么区别HashMap的原理,底层数据结构,rehash的过程,指针碰撞问题HashMap的线程安全问题,为什么会产生这样的线程安全问题ConcurrentHashMap的数据结构,底层原理,put和get是否线程安全Java IO的一些内容,包括NIO,BIO等转载 2017-03-22 14:16:33 · 372 阅读 · 0 评论 -
GCC 编译使用动态链接库和静态链接库的方法
GCC 编译使用动态链接库和静态链接库的方法根据链接时期的不同,库又有静态库和动态库之分。静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行。有别于静态库,动态库的链接是在程序执行的时候被链接的。所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用。2 静态库和动态库的比较链接静态库转载 2017-02-20 21:18:16 · 560 阅读 · 0 评论 -
gcc编译链接多文件
方法一直接编译gcc file1.c file2.c file3.c main.c -o out前提是main.c要include其他文件的头文件,来避免main文件中没有声明就使用没定义的函数导致的报错,如果要写的挫点,也可以不include头文件,而在main文件里手写那几个声明。方法二把3个文件编译成动态共享库,再编译maingcc -shared -fPIC file1转载 2017-02-20 19:46:22 · 1982 阅读 · 0 评论 -
linux下程序计时方法
最近简单学习了下 Linux 下 C++ 程序计时的一些函数和方法,总结如下。没啥 insight 了。方法一:如果是想统计某个程序的运行时间,那么可以使用time ./a.out方法二:如果是想对某个函数或者语句进行计时,那么有别的方法。比如说, gettimeofday 函数。直接贴示例代码:#include void f(){转载 2017-02-28 11:48:26 · 6856 阅读 · 0 评论 -
什么是 CMake
什么是 CMakeAll problems in computer science can be solved by another level of indirection.David Wheeler你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的MS nmake,BSD Make(pmake),Makepp,转载 2016-10-18 08:42:03 · 1179 阅读 · 1 评论 -
重载,重定义,重写(覆盖),名字隐藏
重载:同一个类中,函数名相同但是参数不同,不管是否有virtual关键字。重定义:不同类中(特指基类和子类)函数名相同。但是参数列表和返回值不一定相同。重写(覆盖):基类函数有virtual关键字,且函数名、参数列表、返回值都相同。属于重定义一种。名字隐藏:如果对基类的某一成员函数的版本在子类中重定义,那么基类中该函数的版本将被隐藏。原创 2016-09-21 10:47:37 · 491 阅读 · 0 评论 -
关于引用
1.求下面函数的返回值()int func(x){ int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx;} 假定x = 9999。 答案:转载 2016-06-25 21:32:20 · 309 阅读 · 0 评论 -
函数指针,结构体指针
指针就是一地址,用于指向某种类型的变量 比如,整型指针,函数指针,对象指针都是代表一 地址,指针变量本身大小取决OS的位数,64位就是8个字节,32位4个字节,32寻址的最大内存是4G。#include<iostream>using namespace std;struct node{ int a; int b; int c; double d; };原创 2016-06-04 12:59:41 · 299 阅读 · 0 评论 -
Bebug与Release版本
如果调试过程无调试信息,检查编译选项是否切换到了release下比如Cfree5等编译器ms为了方便调试才诞生了DEBUG版。这也导致了MFC有两个功能一至但版本不同的类库,一个为DEBUG版,一个是RELEASE版。DEBUG:这个版本生成的文件包含调试信息可以在DEV环境下很方便的调试它。RELEASE:经过优化的,不包含调试信息。生成的文件也相对较小。原创 2016-04-30 09:48:40 · 7242 阅读 · 0 评论 -
C++标准库bitset类型的存储方式
C++标准库bitset类型的存储方式 隔了好几天,今晚终于有空来到chinaunix发表下对bitset类型的看法,最近很累,但还是抽点时间来总结一下下。前几天对bitset有一个模糊的概念,对bitset对象里面的存储顺序不太清楚,于是写了一个小程序验证了一下,终于领悟到了这点小case。首先声明一个bitset对象:bitset bitvec;bits转载 2016-05-24 17:30:52 · 707 阅读 · 0 评论 -
C++11中的智能指针
C++ 智能指针shared-ptr,unique_ptr和weak-ptrC++11中的智能指针在C++11中有四种只能指针,auto_ptr,shared-ptr,unique_ptr和weak-ptr。其中auto_ptr有和多不足之处,在C++11中已经建议废弃使用。shared_ptr类智能指针也是模板。所以创建智能指针时要提供其指向的指针转载 2016-05-24 17:31:57 · 1319 阅读 · 0 评论 -
c++11中nullptr(与NULL的区别)
首先呢,要明白一点儿,NULL是一个无类型的东西,而且是一个宏。而宏这个东西,从C++诞生开始,就是C++之父嗤之以鼻的东西,他推崇尽量避免宏。而在他的FAQ中,也有相应的一个关于NULL与0的解释,也谈到了这一点儿。Stroustrup: C++ Style and Technique 在C++标准中,我们可以见到一个词语叫做null pointer constant,其实在C++11标准前,是转载 2016-05-24 17:35:47 · 17454 阅读 · 0 评论 -
C,C++开源项目中的100个Bugs
以下是C++开源项目的一些常见的bug,个人看过之后觉得很棒,自己在实际项目的时候也遇到了很多类似的坑,印象最深的是二维数组越界,第二维越界,由于内存连续,而是访问了下一维的元素,错误隐秘不易察觉[转]C,C++开源项目中的100个Bugshttp://tonybai.com/2013/04/10/100-bugs-in-c-cp转载 2016-04-15 10:19:11 · 4002 阅读 · 0 评论 -
vector初始化的几种方式-STL
vector::iterator int_ite; vector::iterator string_ite; //vector v(n,i)形式,v包含n 个值为 i 的元素 vector ivec(10,0); //vector v(v1)形式,v是v1 的一个副本 vector ivec1(ivec); //vector v(n)形式,v包含n原创 2016-04-27 11:54:28 · 4947 阅读 · 0 评论 -
C++你不知道的事
class A {public: A() { cout<<"A's constructor"<<endl; } virtual ~A() { cout<<"A's Destructor"<<endl; }};class B : public A {public: B() { cout<<"B's constructor"<<endl; } virtual ~B(原创 2016-04-25 22:55:37 · 4501 阅读 · 0 评论 -
C++ STL算法之:copy
C++ STL算法:copy目录(?)[+] 前面十二个算法所展现的都属于非变易算法(Non-mutating algorithms)系列,现在我们来看看变易算法。所谓变易算法(Mutating algorithms)就是一组能够修改容器元素数据的模板函数,可进行序列数据的复制,变换等。 我们现在来看看第一个变易算法:转载 2016-04-26 11:16:38 · 5158 阅读 · 0 评论 -
hash_map,map,unordered_map效率
利用unordered_map代替hash_map实验环境操作系统 fedora9编译器版本 gcc4.3实验方式 各种map使用插入和查找,比较速度和相关性能代码参考代码下面测试说明了速度之间的比较:map类型插入速度插入和查找速度hashmap0m0.123s0m0.369smap转载 2016-04-30 11:18:28 · 8303 阅读 · 0 评论 -
char*,string,char a[], const char *,之间的转换
1. const char* 和string 转换(1) const char*转换为 string,直接赋值即可。 EX: const char* tmp = "tsinghua". string s = tmp;(2) string转换为const char*,利用c_str()或者data() EX: stri原创 2016-04-17 18:11:12 · 3606 阅读 · 0 评论 -
程序(进程)内存空间分布深入理解
经常使用 top 命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, Swapped size (kb)CODE, Code siz转载 2016-04-17 18:29:27 · 5916 阅读 · 0 评论 -
list::splice()函数详解
list::splice()函数详解entire list (1)void splice (const_iterator position, list& x); void splice (const_iterator position, list&& x);single element (2)void splice (const_iterator position, list& x, const_原创 2016-06-04 12:20:03 · 3027 阅读 · 0 评论 -
C++常用的字符串处理函数-全
//字符串分割函数,类似python的splitvector<string> split(char s[],const char *delim){ char *token = strtok(s,delim); vector<string> vstr; while(token!=NULL){ string stmp = token; vstr原创 2016-05-09 15:26:01 · 1922 阅读 · 0 评论 -
C/C++内存泄漏及检测
C/C++内存泄漏及检测“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。如果程序运行时间足够长,如后台进程运行在服转载 2016-04-24 14:26:50 · 4657 阅读 · 0 评论 -
vector去重--unique
具体实现见中间源码function templatestd::uniqueequality (1)template ForwardIterator unique (ForwardIterator first, ForwardIterator last);predicate (2)template Fo原创 2016-04-19 22:46:35 · 3749 阅读 · 0 评论 -
标准非STL容器 : bitset
1. 概念什么是“标准非STL容器”?标准非STL容器是指“可以认为它们是容器,但是他们并不满足STL容器的所有要求”。前文提到的容器适配器stack、queue及priority_queue都是标准非STL容器的一部分。此外,valarray也是标准非STL容器。bitset:一种高效位集合操作容器。2. APIbitset提供的api:(constructor)转载 2016-04-19 11:12:48 · 3863 阅读 · 1 评论 -
map,mulitmap,set,mulitset,unordered_map,unorderer_set
关联容器:map:key-value对set: 关键字即值(要求不重复的关键字)multi:允许重复关键字unordered: 不保持关键字按顺序存储 (哈希函数组织的)如:unordered_multi_map:允许重复关键字,元素无序保存的集合使用关键字类型的比较函数,如果你的元素类型是一个类的对象或者结构体对象,那么你就需要定义原创 2016-05-26 11:33:01 · 464 阅读 · 0 评论 -
C++编译过程与内存空间
为什么需要知道C/C++的内存布局和在哪可以可以找到想要的数据?知道内存布局对调试程序非常有帮助,可以知道程序执行时,到底做了什么,有助于写出干净的代码。本文的主要内容如下:源文件转换为可执行文件可执行程序组成及内存布局数据存储类别一个实例总结 源文件转换为可执行文件源文件经过以下几步生成可执行文件:1、预处理(pr原创 2016-04-17 18:54:48 · 6506 阅读 · 0 评论