C++编程
hellokazhang
不羁的游戏开发者,喝得惯红酒,吃得了大排档,不轻易给自己设限。
展开
-
那些被遗忘的cctype函数
这些函数都在cctype头文件定义isalnum(c) 如果C是字母或数字,则为TRUEisalpha(c) 如果C是字母,返回TRUEiscntrl(c) 如果C是控制字符,返回TRUEisdigit(c) 如果C是数字,返回TRUEisgraph(c) 如果C不是空格,但可以打印,返回TRUEislower(c) 如果C是小写,返回TRUEisprint(c)原创 2012-07-05 14:06:06 · 561 阅读 · 0 评论 -
计数指针,源码雏形
跟auto_ptr对照一下,auto_ptr复制或转移拥有权,看看计数指针有什么不同,看看计数指针是怎么实现的?#include#include#include#include#include#includeusing namespace std;templateclass CountedPtr{private: T* ptr; long *coun原创 2012-07-25 20:07:49 · 410 阅读 · 0 评论 -
仿函数与普通函数的区别
何为仿函数,简单的说就是一个类中,定义了一个operator()函数,并且该函数用于algorithm的函数中,用该类作为algorithm算法的一个参数:这样做,跟普通函数有何不同呢?仿函数又叫函数对象,形如:class FunctionObjectType{ public: void operator()(){ statem原创 2012-07-26 15:22:54 · 3385 阅读 · 1 评论 -
仿函数和普通函数的区别
何为仿函数,简单的说就是一个类中,定义了一个operator()函数,并且该函数用于algorithm的函数中,用该类作为algorithm算法的一个参数:这样做,跟普通函数有何不同呢?仿函数又叫函数对象,形如:class FunctionObjectType{ public: void operator()(){ statem原创 2012-07-26 23:56:49 · 123 阅读 · 0 评论 -
mem_fun_ref,mem_fun,not1,not2,ptr_fun
今天调试程序的时候,遇到了这样一个问题bool check(int elem);vecotv; ...pos=find_if(v.begin(),v.end(),not1(check))竟然出错,查找资料之后,发现,原来原因如下:ptr_fun做的唯一的事是使一些typedef有效( 仿函数类的operator()所带的参数的类型和它的返回类型。对于binary_functio原创 2012-07-26 23:54:35 · 1890 阅读 · 0 评论 -
STL之组合型函数适配器f(g(x)),f(g(x1,x2)),f(g(x),h(x)),f(g(x1),h(x2))
组合型函数分成以下几种,自己写函数适配器f(g(elem)) ------> compose_f_gxf(g(elem1,elem2)) ------> compose_f_gxyf(g(elem),h(elem)) ------> compose_f_gx_hxf(g(elem),h(elem2))原创 2012-07-27 09:46:48 · 1280 阅读 · 0 评论 -
STL之排序算法
SortingsortSort elements in range (function template)stable_sortSort elements preserving order of equivalents (function template )partial_sortPartially Sort elements in r原创 2012-07-27 10:34:10 · 633 阅读 · 0 评论 -
for_each()浅析
for_each()算法非常灵活,它可以不同的方式存取,处理,修改每一个元素对于区间[beg,end)中的每个元素调用op(elem)返回op的一个副本op可以改变元素,注意它和transform的差别op的任何返回值被忽略复杂度:线性,numberofElement次UnaryProcfor_each(InputIterator beg,InputIterator e原创 2012-07-27 13:35:23 · 553 阅读 · 0 评论 -
find,find_if,count,count_if,search_n,search使用浅析
find,和find_if用于容器查找某个值,返回是迭代器。其中关联容器是基于二叉树的,它有自己更高性能的成员函数find和find_if [count和count_if也是一样的]STL这东西,得多敲代码,多理解,原谅我的惰性,我可直接贴代码了。推荐一个网站,可以根据头文件找函数,里面可以找到所有algorithm函数原型和例子:http://www.cplusplus.com/ref原创 2012-07-27 14:37:50 · 1398 阅读 · 0 评论 -
find_first_of,adjacent_find,equal,mismatch,lexicographical_compare大杂烩
各种算法,近日得闲,敲了一下:看算法名称,也大概能猜出这个算法是做什么的,因此,看一下例子就算了,不解释了;#include#include#include#include#includeusing namespace std;int main(){ int a[]={1,2,3,4,5,6,7,8,9,10}; vectorv(a,a+10); vecto原创 2012-07-27 16:42:05 · 443 阅读 · 0 评论 -
自己写一个数组,同样也可以写一个容器
#include#include#include#include#includeusing namespace std;templateclass carray{private: T v[thesize];public: typedef T value_type; typedef T* iterator; typedef const T* con原创 2012-07-25 19:04:03 · 455 阅读 · 0 评论 -
map和multimap
直接贴代码:基础的东西,不解释#include#include#includeusing namespace std;int main(){ mapm; m.insert(make_pair("zhang1",21)); m.insert(make_pair("zhang2",22)); m.insert(make_pair("zhang3",23)); (原创 2012-07-25 18:18:42 · 442 阅读 · 0 评论 -
迭代器之Adapters(STL)
c++标准程序库提供了数个预先定义的特殊迭代器,也叫做迭代器适配器,它们不仅起辅助作用,还能赋予整个迭代器抽象概念更加强大的能力。虽然我的前面一下博客有讲到几种迭代器的适配,但是讲的比较零散,今天翻起STL标准库,想在这里总结一下:迭代器有三种适配器1 Insert iterator(插入迭代器)2 Stream iterator(流迭代器)3 Reverse iterator原创 2012-07-24 20:12:53 · 629 阅读 · 0 评论 -
c++设计与编程之包含关系(包容关系)
在使用包含内容的时候,对于表示类X的对象,存在着两种主要的可选方式:1生命一个类型为X的成员2生命一个类型为X*或者X&的成员如果指针值绝不改变,那么除了效率问题和写构造函数,析构函数的方式之外,这些选择方案是完全等价的:class X{ public: X(int);};class C{ X a; X *p; X &r;public: C(i原创 2012-07-23 11:52:58 · 926 阅读 · 0 评论 -
c++之文件操作,(不以简单而不为,不以难而畏为)
操作相对简单,但不要以为简单而不动手,文件操作流在Java和C++都很重要,以下是雏形:(让您溅笑了)文件写入操作#include#include#includeusing namespace std;int main(){ ofstream file("c:\\hello.txt"); if(!file){ cout<<"can't open it"<<en原创 2012-07-21 21:27:10 · 1031 阅读 · 0 评论 -
C++数组输出,三种方式
#include#includeusing namespace std;int sum1(int a[10]){ int z=0; for(int i=0;i<10;i++){ z+=a[i]; } return z;}int sum2(int a[],int size){ int k=0; for(int i=0;i<size;i++){原创 2012-07-07 10:51:05 · 1327 阅读 · 0 评论 -
STL之pair源码分析
直接进入主题,请看pair的源码:namespace std{ template struct pair{ typedef T1 first_type; //简化类型名称 typedef T2 second_type; T1 first; //两个数据成员 T2 second; pair():first(T1()),second(T2()){}原创 2012-07-23 16:25:01 · 736 阅读 · 0 评论 -
不再害怕指针(极力推荐!)
很多学习C语言或c++的朋友都很怕指针,但是指针却是那么多的重要。今天,鄙人讲一下对指针的认识,让您溅笑了。何为指针,指针就是一个地址,内存地址。int a=100; int *p=&a; p是一个指针,这个指针指向了一个整数a, p就是一个地址,里面存放着变量a说得更形象一点吧,指针跟变量的关系就像是钥匙和抽屉的关系,抽屉(指针)是用来打开(指向)抽屉(变量)的。而抽屉里面的东西,原创 2012-07-24 14:58:06 · 1682 阅读 · 1 评论 -
何谓排序准则
所谓“排序准则”,必须定义strict weak ordering,其意义如下1必须是“反对称的(antisymmetric)”对operator对判断式predicate op()而言,如果op(x,y)为真,则op(y,x)为假2必须是“可传递的(transitive)”对operator对判断式predicate op()而言,如果op(x,y)为真且op(y,z)为原创 2012-07-25 11:35:31 · 621 阅读 · 0 评论 -
set和multiset
比较简单,所以没有注释。#include#include#include#includeusing namespace std;int main(){ set >s; s.insert(4); s.insert(3); s.insert(5); s.insert(1); s.insert(6); s.insert(2); s.insert(5原创 2012-07-25 14:05:23 · 1427 阅读 · 0 评论 -
list操作整理
list自己定义了sort(),unique(),可以不用algorithm的sort和unique了。对比请看我的博客《c++容器算法》粘接,排序,归并void splice(iterator pos,list& x);void splice(iterator pos,list& x,iterator p);void splice(iterator pos,list& x,i原创 2012-07-20 14:22:38 · 663 阅读 · 0 评论 -
细说容器内的各成员函数的使用范围(绝对全)
自己找找看吧(红色字体表示对前面函数的支持)size_type container::capacity() const vector,stringvoid constainer::reserve(size_type num) vector,stringbool comparison(const container& c1,const container& c2) vecto原创 2012-07-25 22:41:05 · 676 阅读 · 0 评论 -
remov,remove_if,remove_copy,remove_copy_if
代码如下:#include#include#include#include#includeusing namespace std;int main(){ int a[]={1,2,3,4,5,6,7,8,9,10}; vectorv(a,a+10); vector::iterator it=remove(v.begin(),v.end(),5); cou原创 2012-07-29 15:17:35 · 367 阅读 · 0 评论 -
next_permutation,pre_permutation,random_shuffle
直接代码://next_permutation prev_permutation#include#include#include#include#includeusing namespace std;int main(){ int a[]={1,2,3}; vectorv(a,a+3); copy(v.begin(),v.end(),ostream_it原创 2012-07-29 15:23:02 · 652 阅读 · 0 评论 -
unique,unique_if,unique_copy
代码如下://unique,unique_if#include#include#include#include#includeusing namespace std;int main(){ int a[]={1,2,3,4,5,1,2,3,4,5}; vectorv(a,a+10); vectorvv(a,a+10); //unique是用来删除连续原创 2012-07-29 15:19:21 · 464 阅读 · 0 评论 -
reverse,reverse_copy,rotate,rotate_copy
代码直接贴了//reverse reverse_copy#include#include#include#include#includeusing namespace std;int main(){ int a[]={1,2,3,4,5,6,7,8,9,10}; vectorv(a,a+10); reverse(v.begin(),v.end());原创 2012-07-29 15:21:16 · 572 阅读 · 0 评论 -
includes,lower_bound,upper_bound,equal_range
直接代码如下://includes#include#include#include#include#includeusing namespace std;bool jiayibijiao(int a,int b){ return a==b;}int main(){ int a[]={1,2,3,4,5,6,7,8,9,10}; int b[]={原创 2012-07-29 15:29:59 · 502 阅读 · 0 评论 -
find_end,find_first_of
直接代码:#include#include#include#includeusing namespace std;int main(){ int a[]={1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10}; vectorv(a,a+20); vectorvv(a+3,a+8); vector::iterator end原创 2012-07-29 15:44:48 · 575 阅读 · 0 评论 -
IO基本操作
要求:理解C++流操作函数理解I/O流格式控制的两种方法输出流(cout)基本操作1、使用流插入运算符( #include void main() { char c[]="Good morning"; cout } 运行结果: Good morning Press any key to continue2、使用成转载 2012-07-30 10:20:55 · 457 阅读 · 0 评论 -
win32
#include#includeLRESULT CALLBACK WinSunProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCm原创 2012-07-13 11:54:22 · 453 阅读 · 0 评论 -
条款23宁以non-member函数代替member函数
1 person.h#ifndef PERSON_H#define PERSON_H#include#includeusing namespace std;namespace stdperson{ class Person { public: Person(); Person(string name, int age); void SetName(strin原创 2013-03-06 15:28:29 · 729 阅读 · 0 评论 -
双链表操作
//------------------------------------------------------------------------------// 双链表的相关操作//------------------------------------------------------------------------------#include using namesp原创 2013-07-22 08:13:36 · 1163 阅读 · 1 评论 -
队列操作
//------------------------------------------------------------------------------// 队列 即比单链表多了头尾标志而已,本质还是单链表//------------------------------------------------------------------------------#include原创 2013-07-22 15:13:55 · 819 阅读 · 0 评论 -
mismatch和lexicographical_compare
代码如下:#include#include#include#include#includeusing namespace std;bool jianyi(int a,int b){ return a==b-1;}int main(){ int a[]={1,2,3,4,5,6,7,8,9,10}; int b[]={1,2,3,5,6,7,8,9,1原创 2012-07-29 15:48:44 · 440 阅读 · 0 评论 -
heap算法,binary_search
直接代码如下://heap算法#include#include#include#include#includeusing namespace std;int main(){ int a[]={7,4,1,8,5,2,9,6,3,8}; vectorv(a,a+10); make_heap(v.begin(),v.end()); for(vector:原创 2012-07-29 15:28:34 · 439 阅读 · 0 评论 -
partial_sort,partial_sort_copy,nth_element
直接代码://局部排序 partial_sort partial_sort_copy#include#include#include#include#includeusing namespace std;int main(){ int a[]={1,4,7,2,5,8,3,6,9,10}; vectorv(a,a+10); vectorvv(a,a+1原创 2012-07-29 15:27:19 · 543 阅读 · 0 评论 -
set_union,set_intersection,set_difference,set_symmetric_difference
直接代码://set_union#include#include#include#include#include#includeusing namespace std;bool fanxu(int a,int b){ return a<b;}int main(){ int a[]={1,2,2,4,6,7,7,9}; int b[]={2,2原创 2012-07-29 15:34:08 · 678 阅读 · 0 评论 -
accumulate,inner_product,partial_sum,adjacent_difference
直接代码如下://数值计算//accumulate#include#include#include#include#include#includeusing namespace std;int main(){ int a[]={1,2,3,4,5,6,7,8,9,10}; vectorv(a,a+10); int max=accumulate(v原创 2012-07-29 15:36:17 · 646 阅读 · 0 评论 -
merge,inplace_merge
直接代码如下//merge#include#include#include#include#includeusing namespace std;bool fanxu(int a,int b){ return a>b;}int main(){ int a[]={1,5,3,9,7}; int b[]={4,2,6,10,8}; vectorv(a原创 2012-07-29 15:38:03 · 930 阅读 · 0 评论 -
adjacent_find,equal
代码如下:#include#include#include#include#includeusing namespace std;int main(){ int a[]={1,2,3,4,5,6,6,8,9,10}; vectorv(a,a+10); vectorvv(a+3,a+8); vector::iterator it; it=ad原创 2012-07-29 15:47:08 · 324 阅读 · 0 评论