C++
避趋之
生命不息,学习不止
展开
-
STL 迭代器
http://www.cplusplus.com/reference/iterator/一、每个标准容器类都提供四种迭代器类型,四种迭代器类型,不是迭代器:iterator,const_iterator,reverse_iterator和const_reverse_iteratortemplate class Pointer = T*, class Re转载 2013-04-09 15:38:01 · 576 阅读 · 0 评论 -
个人C++错误汇总
1、class定义后面要加分号;2、成员函数没有定义为static类型cannot call member function ' without object3、文件组织格式template定义等都在h文件,不需要包含其他头文件调用在c文件,包含template的h文件4、公有的静态成员变量需要在“外部”初始化,才能被其他成员函数使用。如声明时为static原创 2012-11-28 11:10:08 · 12064 阅读 · 1 评论 -
STL 函数对象
stl_function.h基本类:template struct unary_function { typedef Arg argument_type; typedef Result result_type; };template struct binary_function { typedef Arg1 first转载 2013-04-09 11:40:05 · 612 阅读 · 0 评论 -
类型转换
旧式转型:--- 可以替换除dynamic_cast之外的那三种强制转换。 1)C风格的转型动作 2)函数风格的。。。新式转型: 1)const_cast 唯一一个可以将const转为non-const的转换。 const_cast只原创 2012-10-25 10:47:09 · 521 阅读 · 0 评论 -
用C++模板,我犯了一个错误
模板,一定要找到真正用它的cc文件,编译此文件,才会对模板编译!如:模板定义在a.cc模板声明在a.hh 里面#include "a.cc"模板使用在b.cc,里面#include "a.hh",编译为b.so则以后记得编译时,编译b.cc,才会编译到模板。原创 2013-07-11 13:31:52 · 605 阅读 · 0 评论 -
inline
inline说明对编译器来说只是一种建议,编译器可以选择忽略这个建议。关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。在调用内联函数时,要保证内联函数的定义让编译器"看"到,也就是说内联函数的定义要在头文件中转载 2013-04-02 17:31:45 · 518 阅读 · 0 评论 -
泛型算法
stl_numeric.haccumulate、inner_product、adjacent_difference、partial_sum、power、iotacount --- 区间中有多少等于某个值的元素count_if --- 有多少元素满足一个判断式区间中的最小和最大值可以通过min_element和max_element获得accumulate ---原创 2013-04-08 15:40:06 · 547 阅读 · 0 评论 -
C++ new delete new[] delete[]
C++不支持类专属的new-handler,类需要自定义operator new和set_new_handler静态成员函数来使用其专属的new-handler。throwing (1)void* operator new (std::size_t size) throw (std::bad_alloc);nothrow (2) void* operator new (std::s原创 2012-09-24 16:49:52 · 742 阅读 · 0 评论 -
string
http://www.cplusplus.com/reference/string/string/?kw=string定义:typedef basic_string string;typedef basic_string wstring;成员类型:member typedefinitionvalue_type转载 2013-04-02 15:48:30 · 558 阅读 · 0 评论 -
C++ 异常!!!
一.本文前提:默认说明截止至C++98:在C++11,dynamic-exception-specifiers(异常规格)被抛弃。二.exception:virtual const char* what() const throw();打印异常内容。也可能是如下格式const char* what() const noexcep;bad_exception ---原创 2012-10-09 03:33:04 · 1722 阅读 · 0 评论 -
c++ template (总结)
模板中:typename作为嵌套从属类型名称的前缀词。例外:不可以出现在初始值列 和 base class list中。有的编译器不支持子类调用基类的函数(VC2005支持),需要加this->,或using,或classname直接指定;一、函数模板1)分类:1. 成员函数模板:成员函数通过模板传变参。转载 2012-09-27 12:27:52 · 9657 阅读 · 1 评论 -
typeid操作符
typeid是C++的一个操作符。typeid操作符的返回结果是名为type_info,ISO C++标准并没有确切定义type_info,它的确切定义编译器相关的。typeid(基类指针),则表示此指针; 基类至少有一个virtual类型函数,则:typeid(*基类指针),则表示此指针所指对象的实际类型,可以得到派生类的类型;typeid(基类引转载 2013-04-12 15:48:44 · 582 阅读 · 0 评论 -
C++基本知识(持续更新)
一、面向对象概念:1、重载、隐藏、覆盖的区别?重载规则:–1.相同的作用域(不同类的同名函数不是重载)–2.函数名相同。–3.参数个数、类型、顺序、const限定的指针或引用、是否为常成员函数–4.virtual及返回值等其他因素不能作为重载依据。重载函数的选择顺序:先查找严格匹配的(优原创 2012-08-23 03:03:25 · 1076 阅读 · 0 评论 -
STL技巧
注意参数名左右的括号(就像f的第二种声明中的d)和单独的括号(正如本例)之间的区别。参数名左右的括号被忽略,但单独的括号指出存在一个参数列表:它们声明了存在指向函数的指针的参数。// int g(double (*pf)()); int g(double pf()); int g(double ()); 等价!list data(istream_iterator(dataFile转载 2013-04-08 14:40:48 · 556 阅读 · 0 评论 -
STL
容器 --- 迭代器 --- 函数对象 --- 泛型算法 --- 适配器(容器、算法)《Effective STL》http://www.cplusplus.com/reference输出格式:std::boolalpha 布尔类型一、标准序列容器:vector、string、deque和list1. vector对vector操作转载 2013-03-28 11:21:23 · 482 阅读 · 0 评论 -
c++设计准则(句句经典)
More Effective C++.doc用C++语言自己来表达设计上的约束条件,而不是用注释或文档。如阻止继承,实例全部创建在堆中,阻止拷贝构造和赋值;判断一个函数的含意,以及它被派生类重定义的话是否有意义。如果是有意义的,申明它为虚,即使没有人立即重定义它。如果不是的话,申明它为非虚,并且不要在以后为了便于某人而更改;确保更改是对整个类的运行环境和类所表示的抽象是有意义的要将你的转载 2013-07-31 17:41:31 · 699 阅读 · 0 评论 -
cin, cout, ifstream, ofstream, istringstream, ostringstream, <iomanip>
cincin >> str;char c = std::cin.get(); 读入一个字符;std::istream::getsingle character (1)int get();istream& get (char& c);c-string (2)istream& get (char* s, str转载 2013-04-02 16:25:07 · 954 阅读 · 0 评论 -
构造顺序,析构顺序
构造顺序: 基类成员变量构造 --> 基类构造函数 --> 子类成员变量构造 --> 子类构造函数 成员变量构造顺序为声明顺序。析构顺序: 完全反的!!! 子类析构函数 --> 子类成员变析构 --> 基类析构函数 --> 基类成员变量析构 成员变量析构顺序为声明的反序。 因此如果基类使用了子类的成员变量,则只能使用指针或引用原创 2013-02-26 16:34:29 · 1966 阅读 · 0 评论 -
C++性能优化
常规方法:引用,inline1、对象的创建和销毁往往会造成性能的损失。有些情况下,用char *替代string类,可以节省构造和析构时间。2、类型不匹配可能产生临时对象。有时候可以主动生成临时对象,尤其在循环中。尽量按引用传递;3、编译器可能选择了避免优化已命名变量。故尝试返回未命名变量。 或者可以选择用计算性构造函数。两种方法原创 2012-11-29 11:25:59 · 665 阅读 · 0 评论 -
类型转换
不要对数组使用多态语言规范中说通过一个基类指针来删除一个含有派生类对象的数组,结果将是不确定的。这实际意味着执行这样的代码肯定不会有什么好结果。多态和指针算法不能混合在一起来用,所以数组与多态也不能用在一起。 谨慎定义类型转换函数有两种函数允许编译器进行这些的转换:单参数构造函数(single-argument constructors)和隐式类型转换运算符。隐式类型转转载 2012-09-21 15:05:53 · 446 阅读 · 0 评论 -
泛型编程
泛型思维在C++上主要以templates及其相关特性表现出来。如STL,boost。所谓泛型,具有在多种数据类型上都可操作的含义。定义抽象的concepts,并根据抽象的concepts来撰写算法和数据结构,是泛型编程的本质。代码与所处理的对象类型彼此独立;因此,将有泛型算法,泛型对象等等;concept,model,refinement是泛型思想的关键。types即转载 2013-03-28 10:27:56 · 544 阅读 · 0 评论 -
UML 关联, 聚合, 组合
http://justsee.iteye.com/blog/808799http://www.360doc.com/content/07/0612/11/16903_553244.shtmlhttp://www.360doc.com/content/11/1226/16/8426246_175119248.shtmlUML设计类中,类的关系分为Generalization(原创 2012-09-12 17:08:06 · 774 阅读 · 0 评论 -
C++程序员需具备知识
新进C++程序员应在一年内完成学习“basic”类别知识点,两年内完成学习“advance”类别知识点,三到四年内完成学习“expert”1、基础(Basic)(1)变量与基本类型:(2)typedef 和#define;(3)数值与指针:数组定义与初始化、多维数值、指针操作;(4)表达式:算术/逻辑计算、位运算、优先级、类型转换;(5)语句:简单语句、声明/定义语句、复合语转载 2012-08-23 10:04:44 · 874 阅读 · 0 评论 -
设计模式
基本原则: 多用组合,少用继承; 针对接口编程,不针对实现编程; 为交互对象之间的松耦合而努力; 对扩展开放,对修改关闭; 依赖抽象,不依赖具体类; 方法调用不可以使用返回的对象; 一个类应该只有一个引起变化的原因;1、创建型模式: 工厂模式;由子类原创 2012-12-18 22:41:05 · 606 阅读 · 0 评论 -
C++学习著作!(——本人已经走了弯路,大家吸取教训)
发展历程C++语言发展大概可以分为三个阶段: 第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;OO思维。 《C++程序设计教程》(钱能著),《C++ Primer中文版》,《Effective C++》、《More Effective原创 2012-11-19 15:53:30 · 1403 阅读 · 0 评论