Archive for ‘边走编程’ Category

June 26, 2009
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <iomanip>
//~ #include <sqlite.h>
//~ #include <mysql/mysql.h>
using namespace std;
template <unsigned int x, unsigned int y, bool is_ordered = (x >= y)> //~ 一般情况下x>=y
struct static_gcd 
{ 
    static int const value = static_gcd<y, x % y>::value; 
};
Tags: ,. 3 views

class D
这里面有三张函数表,分别对应d的三个基类。事实上,d的虚函数d()的地址保存在了基类B1对应的虚函数表内。从多重继承的内存布局,我们可以看到子类新加入的虚函数被加到了第一个基类的虚函数表,所以当dynamic_cast的时候,子类和第一个基类的地址相同,不需要移动指针,但是当dynamic_cast到其他的父类的时候,需要做相应的指针的移动。

Tags: ,. 54 views
June 24, 2009

在C++程序中,有下面五”类”内存:

  • 在栈上创建。在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,一般使用寄存器来存取,效率很高,但是分配的内存容量有限。
  • 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete来释放内存。动态内存的生存期由程序员自己决定,使用非常灵活。
  • 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
  • 文字常量分配在文字常量区,程序结束后由系统释放。
  • 程序代码区。
Tags: ,. 13 views

使用优化选项编译:

1
$ g++ test.cpp -o test -O2

此时的运行时间:

real	0m0.008s
user	0m0.000s
sys	0m0.004s

so amazing!
g++有四个级别的优化选项,分别对应于 -O1, -O2, -O3, -O4.

Tags: ,. 105 views

比较下面两段代码:

1
2
3
4
for(int i = 0; i < n; i++)
{
     //~ do something;
}
1
2
3
4
for(int i = 0; i < n; ++i)
{
    //~ the same thing;
}
Tags: . 5 views
June 23, 2009
1
2
3
4
5
6
7
8
9
10
11
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <limits>
#include <string>
#include <sstream>
 
 
#include "matrix.hpp"
#include "vector.hpp"
Tags: ,. 7 views
June 21, 2009

与其说计划,倒不如说是给自己制定一个目标和任务。
大约三周的生产实现,料定不会有什么新花样,看透了“培养计划”里面的这些课程,从来都不会有实质性的东西。sucks!但是无论如何这都是必须要完成的任务,积极面对吧。无聊的“生产实习”:I love you game!
三周,一定要把操作系统过一遍,一定能弄清楚很多以前觉得模模糊糊、似懂非懂的概念,第一遍能有一个整体的把握即可。昨天在当当定了一本《深入理解Linux内核》,经典制作,学完操作系统后再从这本书中挑出几个模块来学习,肯定受益良多!线性代数,接下来的一个月内也必须得吃透了,有很多东西确实是忘的一干二净了。

Tags: . 35 views
June 8, 2009

一个double类型的vector,没有把它实现成模板,专门用做普通的数值运算,接口定义在vector.hpp, 实现在vector.cpp,Vector类的整体放在了命名空间(namesapce)dutor内,在该命名空间外还实现了一些常用的全局的运算符。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef DUTOR_VECTOR_HPP
#define DUTOR_VECTOR_HPP
#include <iostream>
 
namespace dutor 
{
    class Vector 
    {
      public:
        Vector(int dim = 1); //构造函数,默认dim = 1
        Vector(double v0, double v1);  //~ 以两个值v0, v1初始化一个二维点 
        Vector(double v0, double v1, double v2); //~ 以三个值v0, v1, v2初始化一个三维点 
        Vector(const Vector& dv); //~ 复制构造函数
        //~ ......
Tags: ,. 19 views
June 5, 2009

这些都是对一个设计良好的类的最基本的要求,每当完成一个类的设计时,都要把这些问题都审视一遍,养成好的习惯。

  1. 构造函数
  2. 数据成员是私有的
  3. 无参数的构造函数
  4. 初始化所有数据
  5. Destructor
  6. 有可能被继承的话一定 destructor 要virtual,否则,尽量不用virtual
  7. Copy Constructor
  8. x=x 能正常工作?(自己赋值给自己)
  9. 逻辑关系运算符?
  10. Copy Constructor/operator= 使用 const reference
  11. 函数参数用reference 还是 const reference 还是 object
  12. 不修改成员的函数一定得要const,否则作为const reference 无法调用。
Tags: ,. 2 views
May 30, 2009
从单个源文件生成可执行程序

下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:

1
2
3
4
5
6
7
/* helloworld.cpp */
#include <iostream>
int main(int argc,char *argv[])
{
    std::cout << "hello, world\n";
    return(0);
}
Tags: ,. 200 views
Page 10 of 15« First...6789101112131415