随笔分类 -  C++

STL算法
摘要:STLのほとんどのアルゴリズムには入力となる要素の集合を2つのイテレータで指定します。ひとつは集合の先頭を指すイテレータfirst、もうひとつは集合の末尾の次を指すイテレータlastです。 【検索・走査アルゴリズム】<algorithm>で定義されているものcount()(I, I)値が一致する要素の数を返すcount_if()(I, I)条件に合う要素の数を返すequal()(I, I), I2つの配列を比較し、すべて一致したらtrueを返すfind_end()(F, F), (F, F)配列1の一部と配列2が部分一致したら、その最後の位置を返すfind()(I, I)配列を走査 阅读全文

posted @ 2013-05-29 20:31 至柔 阅读(161) 评论(0) 推荐(0)

STL类整理
摘要:◆ 順序コンテナ【vector】【list】【deque】ベクタ要素へのアクセス、ならびに要素の追加は 定数時間 で完了する。ベクタ と比較して挿入と削除は速く、ランダムアクセスは遅い。両端キューは ベクタ とほぼ同等であるが、コンテナの (末尾に加えて) 先頭への挿入・削除を高速に行える点が異なる。一方で特定の値を突き止める、ならびにベクタへの要素挿入は 線形時間 を要する。コンストラクタベクタを生成する関数assign()リストに要素を割り当てるコンストラクタ新規に両端キューを生成する演算子ベクタの割り当て、比較を行うback()最終要素を返す演算子両端キューの割り当て、比較... 阅读全文

posted @ 2013-05-29 20:27 至柔 阅读(205) 评论(0) 推荐(0)

C++ 编程思想——继承和组合
摘要:缺省是Private继承。构造函数初始化表达式表允许显式调用成员对象的构造函数。内置类型可以像是有单个构造函数的对象一样初始化。如 int i; i(123);但它并不是真的有构造函数。构造函数调用顺序: 先调用基类构造函数,然后调用成员对象构造函数。成员函数构造函数调用顺序按声明顺序。析构函数调用顺序: (和构造函数相反)名字隐藏:在派生类中重定义的函数名会掩盖所有基类版本。非自动继承的函数:构造/析构函数不能被继承,operator = 也不能被继承。继承和组合都能把子对象放在新类中,都使用构造函数的初始化表达式去构造子对象。is-a用继承表达,has-a用组合表达。继承也就是取一个已存在 阅读全文

posted @ 2013-01-19 20:53 至柔 阅读(606) 评论(0) 推荐(0)

pure virtual函数_可以有实现
摘要:提供缺省行为通过普通virtual函数就可以了。为了防止新派生类有不同行为,却忘记override,可以声明纯虚函数,然后提供缺省实现。这个实现必须显式通过类域调用。(如果纯虚函数没有其实现,其他有公共行为的派生类就要写多余重复的代码。)effective c++条款36(说明了纯虚函数的实现)纯虚函数必须在子类中重新声明,但它还是可以在基类中有自己的实现。下面的Airplane正是利用这一点重新定义了一个纯虚函数:class Airplane {public: virtual void fly(const Airport& destination) = 0; ...};void Ai 阅读全文

posted @ 2013-01-14 21:27 至柔 阅读(260) 评论(0) 推荐(0)

C++ 编程思想——运行时类型识别
摘要:RTTI的两种使用方法:1. 第一种是typeid(),它很像sizeof,看上去像一个函数,但实际上它是由编译器实现的。 typeid()的参数是一个对象引用或者指针,返回全局typeinfo类的常量对象的一个引用。可以用==或者!=来互相比较这些对象。 ISO C++标准并没有确切定义typeinfo,它的确切定义编译器相关的,但是标准却规定了其实现必需提供如下四种操作:typeinfo1 == typeinfo2如果两个对象typeinfo1和typeinfo2类型相同,则返回true;否则返回falsetypeinfo1 != typeinfo2如果两个对象typeinfo1和type 阅读全文

posted @ 2012-12-10 15:00 至柔 阅读(3903) 评论(0) 推荐(0)

C++ 编程思想——引用和拷贝构造函数
摘要:引用就像能自动地被编译器间接引用的常量型指针。它通常用于函数的参数表中和函数的返回值,但也可以独立使用。当引用被做函数参数时,在函数内任何对引用的更改将对函数外的参数产生改变。从函数返回的引用必须像指针一样对待。当函数返回时,引用关联的对象应该存在,否则,将不知道指向哪一个内存。使用引用时有一定的规则:1.创建引用时必须初始化。2.引用被初始化后就不能改变。3.引用不能为NULL。必须确保引用和一块合法的存储单元关联。参数传递准则: 传值方式需要调用构造函数和析构函数,然而如果不想改变参数,则可通过常量引用传递,它仅需要将地址压栈。声明一个私有的拷贝构造函数可以防止按值传递。拷贝构造函数在按值 阅读全文

posted @ 2012-12-09 14:17 至柔 阅读(334) 评论(0) 推荐(0)

C++ 编程思想——命名控制
摘要:1、static静态对象的析构函数在程序从main()块中退出时,或标准的C库函数exit()被调用时才被调用。这意味着在析构函数内部使用exit()很危险。可以用atexit()来指定当程序跳出main()或调用exit()时应执行的操作。如果一个包含静态对象的函数未被调用过,那么这个对象的析构函数也就不会被执行。在文件范围内,一个被明确声明为static的对象或函数的名字对编译单元来说是局部变量。局部类(在函数内部定义的类)中不能有静态数据成员。2、namespacenamespace只能在全局范畴定义,但它们之间可以互相嵌套。一个namespace可以用一个名字作它的别名。 例:name 阅读全文

posted @ 2012-12-06 21:09 至柔 阅读(122) 评论(0) 推荐(0)

C++ 编程思想——内联函数
摘要:应该永远不使用宏,只使用内联函数。任何在类中定义的函数自动地成为内联函数。也可用inline关键字使类外定义的函数成内联函数。内联函数必须使函数和声明结合在一起,否则编译器将他作为普通函数对待。一般应该把内联函数放在头文件里。在头文件里,内联函数默认为内部连接,即static。并且只能在它被包含的编译单元看到。只要在不同的编译单元中声明,在内敛函数和全局函数之间用同样的名字也不会在连接时产生冲突。如果函数太复杂,编译器将不能执行内联。一般,任何类型的循环都被认为太复杂而不能扩展为内联函数。内联仅是编译器的一个建议,编译器不强迫内联任何代码。 阅读全文

posted @ 2012-12-05 21:19 至柔 阅读(128) 评论(0) 推荐(0)

C++ 编程思想——常量
摘要:1、应该完全用const取代#define的值替代。2、C++中的const默认为内部连接。 ( C默认const是外部连接的。如果在C++中想达到外部连接,必须用extern。 ) 就是说,const仅在const被定义过的文件里才是可见的,而在连接时不能被其它编译单元看见。 否则由于众多的const在多个cpp文件内分配存储,容易引起连接错误。3、常量指针: const int * x; 指针常量: int * const x = &d; 常量对象: const int * const x = &d; or int const * const x = &d; ( 指 阅读全文

posted @ 2012-11-29 21:50 至柔 阅读(157) 评论(0) 推荐(0)

C++ 编程思想——函数重载与缺省参数
摘要:函数重载的意义,在于用不同的参数区分不同的操作。函数重载只要参数不同。编译器会通过分解函数名字、范围、参数来产生内部名字以供链接器用。缺省参数的意义,在于 1、简化对固定参数值的设置,方便函数调用; 2、为以后修改函数定义留下方便。缺省参数在声明时定义缺省值,在定义时不能再写缺省值,而和正常函数相同。 例: void fun(int param, int = 0, float = 1.1)不能把缺省参数作为一个标志去决定执行函数的哪一块,这是基本原则。这种情况下,只要能够,就应该把函数分解成两个或多个重载的函数◆缺省参数可以让声明的参数没有标识符,这种语法允许把一个参数当作占位符而不去用它。. 阅读全文

posted @ 2012-11-28 21:37 至柔 阅读(562) 评论(0) 推荐(0)

句柄类 (Thinking in c++__1)
摘要:需求:1)安全技术安全的需要。即使核心实现封闭在库中不可见,但是头文件中的变量定义仍然会曝露一些内部信息; 2)节省编译时间的需要。在开发设计初期,实现部分需要经常变动,连头文件中变量定义也需要经常变动,因此在重编译的时候头文件也需要编译,有时候导致编译时间过长。方案: 句柄类可解决上述问题://:HANDLE.H--HandleClasses#ifndefHANDLE_H_#defineHANDLE_H_classhandle{structcheshire;//Classdeclarationonlycheshire*smile;public:handle( ); void doit( ). 阅读全文

posted @ 2012-10-14 19:03 至柔 阅读(154) 评论(0) 推荐(0)

C++构造函数调用顺序
摘要:1、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);2、如果类里面有成员类,成员类的构造函数优先被调用; 3、基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的 顺序而不是它们在成员初始化表中的顺序; 4、成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中 被声明的顺序而不是它们出现在成员初始化表中的顺序; 5、派生类构造函数 作为一般规则派生类构造函数应该不能直接向一个基类数据成员赋值而是把值传递 给适当的基类构造函数否则两个类的实现变成紧耦合的(tightly coupled)将更加难于 正确地修改或扩展基类的实... 阅读全文

posted @ 2012-02-05 18:30 至柔 阅读(11364) 评论(0) 推荐(1)

导航