- 博客(17)
- 收藏
- 关注
原创 C++11(16):标准库特殊设施
tuple是类型pair的模板。不同tuple类型的成员类型也不同,但一个tuple可以有任意数量的成员。每个确定的tuple类型的成员数目是固定的。当我们希望将一些数据组合成单一对象,但有不想麻烦地定义一个新数据结构来表示时,tuple是非常有用的。(“快速而随意”的数据结构)tuple类型及其伴随类型和函数都定义在tuple头文件中。tuple t; t是一个tuple,成
2014-09-28 22:38:11
1468
原创 C++11(15): 模板与泛型编程
面向对象编程和泛型编程都能处理在编写程序时不知道类型的情况。不同之处:OOP能处理类型在程序运行之前都未知的情况;而泛型编程中,在编译时就能获知类型了模板参数类别不能为空。模板参数表示在类或函数定义中用到的类型或值。template int compare(const T &v1 , const T &v2){ if(v1 if(v2 return
2014-09-16 12:17:45
1993
原创 C++11(14):面向对象程序设计
面向对象程序设计基于三个基本概念:数据抽象、继承和动态绑定。继承和动态绑定对程序的编写有两方面影响:一是我们可以更容易地定义与其他类似但不完全相同的新类:二是在使用这些彼此相类似的类编写程序时,我们可以在一定程度上忽略掉他们的区别。使用数据抽象,我们可以将类的接口和实现分离,使用继承,可以定义相类似的类型并对其相类似的关系建模,使用动态绑定,可以再一定程度上忽略相似类型的区别,而以统一的方
2014-09-13 23:27:15
963
原创 C++11(13):重载运算与类型转换
除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。当以个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的(显式)参数比运算对象的数量少一个。当运算符作用于内置类型的运算对象时,我们无法改变运算的含义。:: .* . ?: 这四个运算符不能被重载。
2014-09-12 11:12:59
1422
原创 C++11(12):拷贝控制
拷贝构造函数的第一个参数必须是引用类型,此参数几乎总是const的引用。拷贝构造函数在几种情况下会隐式地使用。因此,拷贝构造函数不应该是explicit的即使我们定义了其他构造函数,在没有拷贝构造函数时,编辑器也会为我们合成的。编辑器从给定对象中依次将每个非static成员拷贝到创建的对象中。每个成员决定了它使用何种方式进行拷贝。类调用拷贝构造函数,数组逐个拷贝,内置类型直接拷贝strin
2014-09-11 10:45:32
1755
原创 C++11(11):动态内存
动态分配的内存,只有在显式释放是,这些对象才会销毁。但是标准库中的两智能指针可以确保自动释放除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存被称作自由空间或堆。静态内存用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量。栈内存用来保存定义在函数没得非static对象。智能指针:三个类都定义在memory头文件中:shared_ptr允
2014-09-10 18:53:11
1369
原创 C++11(10):关联容器
关键字有序保存元素,map,关联数组,保存关键字-值对,set,关键字即值,只保存关键字的容器multimap,关键字可重复出现multiset,无序集合unordered_map,用哈希函数组织的mapunordered_set,用哈希函数组织的setunordered_multimap,哈希组织的map;关键字可重复出现unordered_multiset,
2014-09-10 13:11:38
1000
原创 C++11(9):泛型算法
大多数算法都是定义在头文件algorithm中。标准库还在头文件numeric中定义了一组数值泛型算法算法不依赖于容器,但依赖于元素类型泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作。因此,算法不会改变底层容器的大小。find(bigin(ia),end(ia),val);int sum=accumulate(vec.cbegin( ),vec.cend
2014-09-10 12:59:15
642
原创 C++11(8):顺序容器
string和vector将原始保存在连续的内存空间,在尾部插入删除快deque支持随机访问,在头尾插入、删除很快 新版c++增加了forward_list和array,现代c++程序应该使用标准库容器,而不是更原始的数据结构。新版的c++容器要比旧版的快得多选择容器的一些原则,除非你有很好的理由选择其他容器,否则使用vector如果你的程序有很多小元素,且空间的额外开销很
2014-09-10 12:58:09
849
原创 C++11(7):IO库
iostream istream,ostream ,iostreamfstream ifstream,ofstream, fstreamsstream sstringstream,ostringstream,stringstream为了支持宽字符wchar_t,在函数和类型名前加w,wcin,wistream我们不能拷贝或对IO对象赋值,进
2014-09-10 12:57:00
745
原创 C++11(6):类
在成员函数中,我们可以修改this的属性,(this 是 指向非常量的常量指针)std::string Sales_data::isbn(const Sales_data *const this);成员函数可以随意使用成员变量,编译器先编译变量读入操作会改变流的内容,一般来说执行输出任务的函数应尽量减少对格式的控制,这样可以由用户代码来决定是否换行构造函数不能声明成const
2014-09-10 12:53:15
550
原创 C++11(5):函数
参数传递时,如果是引用类型,它将绑定到对应的实参上,否者,将实参的值拷贝后赋给形参。引用可避免拷贝,如果不需要改变参数,最好定义成常量引用。和其他初始化一样,当用实参初始化时会忽略顶层const,当形参有顶层const时,传给它常量对象或非常量对象都可以我们可以用非常量初始化一个底层const对象,但反过来不行,同时一个普通的引用必须用同类型的对象初始化尽量使用常量引用可以使用
2014-09-04 22:36:07
506
原创 C++11(4):语句
case 必须是整型常量表达式对已case内部变量的定义,变量的定义对之后的case是可见的,如果跳过了变量定义及初始化的语句,后面的case对变量的使用时为初始化的要解决,可以把变量的定义放在以个语句块中,后面就不可见了do while 不允许在条件部分定义变量try{ if(i!=j) throw runtime_error("no same
2014-09-01 21:28:18
547
原创 C++11(3):表达式
函数调用也是一种特殊的运算符当一个对象被用作右值时,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(内存中的位置)在需要右值的时候可以用左值来代替,但是不能把右值当成左值。使用decltype,左值和右值有所不同:如果表达式的求值结果是左值,decltype得到的是一个引用。int * p;decltype(*p) ;// p是int&decltyp
2014-08-31 10:43:50
569
原创 vs12-boost库编译
从www.boost.org下载最新版的boost源代码解压到E:\library\boost_1_55_0执行E:\library\boost_1_55_0\bootstrap.bat。就可以在这个文件夹中发现bjam.exe。E:\library\boost_1_55_0目录下。用VS2012 x64 Cross Tools Command Prompt并cd 到指定文件目录
2014-08-30 16:05:38
561
原创 c++11(2):字符串、向量和数组
头文件不应该包含using声明,防止名字冲突string 定义在命名空间std中。初始化string对象方式:string s1;string s2(s1);string s2=s1;string s3("value");string s3="value";string s4(n,'c') ///s4初始化成由n个字符c组成的串用等号执行的是拷贝初始化,不用
2014-08-30 10:24:40
843
原创 C++11(1):变量和基本类型
当赋给带符号型一个超出它表示范围的值时,结果是未定义当赋给无符号型一个超出它范围的值,结果是初始值对无符号型表示总数取模后的余数。把-1赋给8比特(0~255)的unsigned char结果255切勿混用带符号类型和无符号类型如果一个字面值连与之关联的最大的数据类型都放不下,将产生错误初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,二赋值的含义是把对象当前值擦除,而以一
2014-08-29 21:39:51
686
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人