- 博客(9)
- 资源 (2)
- 收藏
- 关注
原创 伴随数组求亲和数::伴随数组
int sum[5000000] = {0};void InitSum(){ for(int i=1; 2*i <= 5000000; ++i) { int j = i+i; while(j <= 5000000) { sum[j] += i; j += i; }
2013-12-04 21:40:49 568
原创 在数组中删除尽可能少的数,使得数组满足“先由小到大,再由大到小”
void MyDelete(int* a, int n){ int* asc = new int[n]; // asc[i]表示以a[i]结尾的最长升序 int* desc = new int[n]; // desc[i]表示从a[i]开始的最长降序 int* inc = new int[n]; // 亮点,用辅助数组的巧妙之处 const in
2013-12-04 15:51:35 932
原创 effective c++
1. 不要让构造函数和析构函数吐出异常, 这样可能会造成资源泄漏和不明确行为2.构造函数和析构函数不要调用虚函数。3.将基类析构函数定义为虚函数 ,这样动态析构时不会出错4.将常用精简的函数设为inline,不要滥用,否则造成代码膨胀5.使用template时也要考虑代码膨胀的问题6.use const whenever possible7.使用引用的好处:少了一个构造和析
2013-12-01 12:24:12 340
原创 模板swap
template void swap(tp (&a)[num], tp (&b)[num]){ for(size_t t=0; t<num; ++t) swap(a[t],b[t]);}交换数组内容, 此模板必须使用引用, 否则num值无法传过去,这是一个指针降阶的问题
2013-12-01 11:51:31 1024
原创 实现rotate的几种算法
Rotate 123abcdefg to abcdefg123. there are three ways to do this(1)循环换位算法(2)三次反转算法(3)排列循环置换算法:王晓东老师在著作中介绍了一条循环置换分解定理:对于给定数组A[0..N-1]向后循环换位N-K位运算,可分解为恰好gcd(K,N-K)个循环置换,且0,...,gcd(K
2013-12-01 11:33:11 1070
原创 const_cast所造成的同地址不同值问题
#include using namespace std;int main(){ const int m = 9; int* p = const_cast(&m); *p = 2; cout << &m << " " << m << endl; cout << p << " " << *p << endl; return
2013-12-01 11:25:08 629
原创 一些C++语法
一、 C++ 中cast 意为强制类型转换 , const_cast 去除const特性; static_cast 类型静态转换 float f; static_cast(f); dynamic_cast 将指向基类的指针动态转换为指向派生类的指针 Base* p; Derive* pp = dynamic_ cast(p)
2013-12-01 11:16:10 395
原创 阻止copying行为
方法一:class Derive{private: Derive(const Derive&); Derive& operator=(const Derive&); //只声明,不定义};方法二:class Uncopyable{protected: Uncopyable() {} //允许Derived对象构造和析构 ~Uncopy
2013-12-01 11:09:41 442
原创 copy_constructor, copy_assignment
#include using namespace std;class Base{public: Base() { cout << "Base constructor " << endl; } Base(const Base &b) { cout << "Base copy constructor " << end
2013-12-01 10:39:55 458
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人