- 博客(12)
- 收藏
- 关注
原创 C++学习之模板:模板重载
对模板的重载,两个函数模板分别获得对象对应的字符串或者对应的指针的值和指针所指对象的值.template<typename T> string debug_rep(const T& t) { ostringstream ret; ret << t; return ret.str(); }template<typename T> string debug_rep(T* p) {
2015-11-26 19:48:15 796
原创 将一个数m分解为n个不同的数之和(积)
简单递归求解.#include "iostream" #include "vector" #include "algorithm" using namespace std; #define N 4 vector<int>record; vector<vector<int>> result; void print() { for (auto it : record) cout
2015-11-26 16:58:36 7597
原创 四阶幻方的穷举求解.
速度太慢了,有时间研究构造四阶幻方的构造法…..#include "iostream" #include "algorithm" #include "queue" #include "vector" #include "list" using namespace std; bool isused[17] = { false }; int board[17]; queue<int>x;#define
2015-11-26 16:35:21 2243
原创 再次探究复制问题的解法.
如何将一个字符迅速复制粘贴到N个字符?同样采取动态规划的方法,但是这次的方法更加基础和容易理解.虽然效率变差了.我们将建造一个状态空间,它有两个变量,当前的字数和粘贴板上面的字数.可以考虑到所求为F[N][M],M应该小于等于N/2;注意到当M<N/3时,它可能是由F[N-1][M]写入一个字符得到,也可能是由F[N-M][M]进行一次粘贴得到.当M>N/3时,它只可能是由F[N-1][M]得到的.
2015-11-26 15:18:09 303
原创 转载:C++11尝鲜:std::move和std::forward源码分析
std::move和std::forward是C++0x中新增的标准库函数,分别用于实现移动语义和完美转发。 下面让我们分析一下这两个函数在gcc4.6中的具体实现。 预备知识 引用折叠规则: X& + & => X& X&& + & => X& X& + && => X& X&& + && => X&& 函数模板参数推导规则(右值引用参数部分): 当函数模板的模板参数为T而函数形
2015-11-04 23:00:36 388
原创 C++primer学习:模板编程(6):模板实参推断和forward的运用与源代码
下面讨论一下当函数参数是引用时的情况.(1)左值引用 T&,只能传递给它一个左值.实参的const属性会被保留.(注意这里不是值拷贝,而是引用,const是底层的,不会被忽略).而T会被推断为实参引用的类型;(2)右值引用T&&,正常规则是传递给它一个右值,这时候会将T推断为右值实参的类型.如果传递的是一个左值,那么就会发生特殊的情况.首先T会被推断为实参的左值引用类型.然后形参则相当于X& &&类
2015-11-04 22:48:17 609
原创 动态规划:多少次可以把一个字符复制到N个字符?
如何将一个字符以最少的按键次数复制为N个字符.算法思路:这是一个动态规划的问题,首先我们需要思考能做出的决策.[1]按键一次,输入一个字[2]全选[3]复制[4]粘贴.如果要将原来的字符变成2份.需要:[2][3][4][4],粘贴2次才能变成2倍.如果继续粘贴,我们需要k次按键将其复制为k-2倍.现在考虑如何写出地柜表达式.假设F[n]代表复制到n个字符需要的时间,那么有哪些途径可以到达F[n]的
2015-11-04 13:02:34 950
原创 C++primer学习:模板编成(5):模板实参推断{1}
在向函数模板传递实参的时候,顶层const会被忽略,在其他类型转换中,能用于模板参数转换的有如下两项.[1]const转换.允许将一个非const对象的引用传递给一个const指针或者引用.[2]数组或者函数向指针的转换.注意:如果函数中的参数不是模板参数,那么它的类型转换就与普通函数的转换是一样的#template <class T> int compare(const T&, const T&)
2015-11-03 22:00:04 375
原创 C++primer学习:模板编程(4)
[练习]:在Blob类中用shared_pointer代替shared_ptr.#ifndef CP5_ex16 #define CP5_ex16 #include "iostream" #include "fstream" #include "sstream" #include "
2015-11-03 19:18:04 253
原创 C++primer学习:模板编程(3):效率与灵活
shared_ptr与unique_ptr之间的明显不同是它们保存指针的策略,另一个不同是它们允许用户重载默认删除器的方式.shared_ptr将删除器以指针的方式存储,而unique_ptr则将它作为自己类型的一部分.[练习]:编写自己的shared_ptr类与unique_ptr类用fuction可以接受所有的可调用对象.#include "iostream" #include "DebugDe
2015-11-03 18:47:08 319
原创 C++primer学习:类模板(2)类模板:模板参数,成员模板和控制实例化
默认模板参数.F代表一个默认的类型less<T>。用户也可以自己传入相应的可调用对象.当然返回值必须是bool,同时也必须匹配前面的参数.template<typename T,typename F = less<T>> int compare(const T& lhs, const T& rhs, F f = F()) { return f(lhs,rhs) ? -1: (f(rhs,l
2015-11-03 13:31:48 398
原创 C++primer学习:模板编程(2):类模板的定义
类模板是用来生成类的蓝图的,与函数模板不同的是,编译器不能为类模板推导模板参数的类型,我们必须要提供额外的信息.[1]定义类模板:####template<typename T> class { }[2]类模板的成员函数本身是一个普通的函数,但是由于类模板的每个实例都有自己的模板参数,因此定义在类模板的成员函数就必须以关键字template开头,后接模板参数.[3]当我们在类的作用域之内使用类模板类
2015-11-01 15:18:25 363
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人