C/C++
文章平均质量分 78
robertzhang10
这个作者很懒,什么都没留下…
展开
-
另类的数组拷贝
void send(int *to,int *from,int count){ int n=(count+7)/8; switch(count%8) { case 7: do { *to++=*from++; case 6: *to++=*from++; case 5: *to++=*from++;原创 2006-11-24 20:46:00 · 648 阅读 · 0 评论 -
矩阵填数
题目: 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:例如N=5 ① 倒填 ② 蛇形填数 ③ 回转填数25 24 23 22 21 1 3 4 10 11原创 2007-01-27 14:04:00 · 1915 阅读 · 0 评论 -
引用入门
在C++中提出了引用这个概念,它和指针类似,但用起来更方便。一、普通引用 这里的引用有时候也称为别名,实际就是说两个不同名称的标识符指向了同一个内存地址。#include iostream>using namespace std;int main(){ int y; int& r=y; const int& q=12;原创 2007-02-02 16:32:00 · 460 阅读 · 0 评论 -
拷贝构造函数的使用
一.为什么会有拷贝构造函数#include fstream>#include string>using namespace std;ofstream out("HowMany.out");class HowMany{private: static int objectCount;public: HowMany() { objectCount++; } s原创 2007-02-03 14:18:00 · 809 阅读 · 0 评论 -
继承和组合
C++最重要的特征之一是代码重用。但是如果希望更进一步,就不能仅仅用拷贝代码和修改代码的方法,而是要做更多的工作。一. 组合语法 实际上,我们一直都在使用组合创建类,只不过是在用内部数据类型组合新类。class X{ int i;public: X() { i=0 } void set(int ii)原创 2007-03-24 13:47:00 · 934 阅读 · 0 评论 -
多态性(一)
多态性是实现C++面向对象性质的一个重要特征一. 虚函数的出现 C++中为什么会出现多态这个性质呢?先看下面一个例程//Inheritance & upcasting#include iostream>using namespace std;enum note { middleC,Csharp,Eflat }; //Etc.class Ins原创 2007-04-01 10:40:00 · 23488 阅读 · 1 评论 -
多态性(二)
四. 抽象基类和纯虚函数 我们在设计时,常常希望基类仅仅作为其派生类的一个接口。这就是说,仅想对基类进行向上类型转换,使用它的接口 ,而不希望用户实际地创建一个基类的对象。要做到这点,可以在基类中加入至少一个纯虚函数(pure virtual function),来是基类成为抽象类(abstract)。纯虚函数使用关键字virtual ,并且在其后面加上 = 0 。如果某人试着生原创 2007-04-02 16:18:00 · 850 阅读 · 0 评论 -
多态性(三)
七. 虚函数和构造函数 当创建一个包含有虚函数的对象时,必须初始化它的VPTR以指向相应的VTABLE。这必须在对虚函数进行任何调用之前完成,显然这是构造函数的工作。编译器在构造函数的开头部分秘密地插入初始化VPTR的代码。 构造函数的初始化顺序和普通的情况一样,基类构造函数首先调用。不过,如果我们在构造函数中调用了虚函数会发生什么?对于在构造函数中调用一个虚函原创 2007-04-06 19:34:00 · 641 阅读 · 0 评论 -
类型转换
一. 隐式转换 隐式转换是C中比较常见的转换 ,对于内置类型,我们通常使用的也是隐式转换 int a=10; float c=a; double d=120.43; int d2=d; 可以看出从int 转向float 没有什么问题,但从doub原创 2007-04-07 14:37:00 · 693 阅读 · 0 评论 -
C++编程准则
1. 首先让程序运行,然后再追求速度。即使我们确定这一段程序非常重要,而且是我们系统中的瓶颈。不要优化, 首先用尽可能简单的设计使程序可以运行,如果速度不满足要求,再对其进行分析。我们总是能够发现“我们的”瓶颈并不是问题所在。节省我们的时间做真正有意义的事。2. 编写简洁优美的程序有很多潜在的好处。这不是可有可无的。简洁优美的程序不仅易读,易调试,而且易于理解和维护,这正式能够带来经济利益的地转载 2007-04-16 13:39:00 · 940 阅读 · 1 评论 -
常量综述(三)
const对象和成员函数 用户定义类型和内部类型一样,都可以定义const对象,比如 const Hony h(3); 对于const成员函数,就是告诉编译器该成员函数可以为一个const对象所调用,当然非const对象也能调用。然而这就出现个问题怎么声明const成员函数,这里用了个新的语法形式,把修饰符const放在函数参数表的后面。原创 2007-01-26 12:59:00 · 511 阅读 · 0 评论 -
常量综述(二)
参数传递和返回值的小结: void t(int*) {}void u(const int *p){ *p=2; //error int i=*p; //OK int* p2=p; //error}const char* v(){ return "result of function v";}const int*原创 2007-01-25 15:03:00 · 459 阅读 · 0 评论 -
数组拷贝的速度比较
#include iostream>#include time.h>#include stddef.h>#include string.h>using namespace std;void copy_with_pointers(char const *src,char *dst,size_t n)...{ for(size_t k=0;k!=n;++k) *dst++=*s原创 2006-11-27 20:50:00 · 1158 阅读 · 0 评论 -
求十亿内的素数
前几天同学让我帮他做道题,关于求素数的,十亿两分钟内出结果 。 (编译器 mingw-g++)最开始是用的最常见的欧几里得筛选法 bool IsPrime(long x){ int s=(int)sqrt(x); for(int i=3;is;i+=2) { if(x%i==0) return false; } re原创 2007-01-16 22:05:00 · 2410 阅读 · 3 评论 -
Huffman编码的实现
这里的Huffman编码就是离散数学中学的最优二叉树,现在我们用C++来实现它。 首先考虑实现它使用的数据结构,当然这里肯定使用二叉树。其次就是存储方式,对于树一般情况是用间接存储也就是链表。但是二叉链表不方便寻找双亲节点,这里使用向量更好,对存储空间的利用率也较高。 建立数据结构: Huffman树中每个节点看成数组中的一个元素,它的属性有:权(w原创 2007-03-02 19:01:00 · 1839 阅读 · 1 评论 -
关于相邻两数之和为素数的解答
题目:巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之 和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。 先说下这道题的思路,肯定是应该用回溯的方法。穷举则运算的量太大不适合,而递归空间复杂度也太大。先放入第一个数 1,然后依次放入2、3、4···,每次放入时判断与前一个数之和是否为素数,若是则继续放入,若不是则回退一步,选后一个数。这样直到原创 2007-01-21 13:22:00 · 3660 阅读 · 0 评论 -
二进制加法
题目: 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进制加法运算,再将结化为十进制数输出。 (二进制加法规则:0+0=0 0+1=1 1+0=1 1+1=10 )提示:在数组里运算。思路:先将输入的数转成二进制,此时数是倒着排的即二进制的最低位在x[0],我们打印的时候把它正过来;做加法时模拟二进制加法规则,再考虑进位,这里我用的while循环,原创 2007-01-21 18:10:00 · 4307 阅读 · 0 评论 -
八皇后问题求解
〖问题描述〗在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相冲突(在每一横列竖列斜列只有一个皇后)。 这里我是用回溯法来实现的,存储方式采用的是孩子兄弟表示法。即将一般的数改用二叉树的形式来存储,左子树指向第一个孩子节点,右子树指向第一个兄弟节点。 因为用递归思路比较简单,我就直接帖代码了。 QueenTree是整个树的类,Node是每原创 2007-03-07 16:11:00 · 735 阅读 · 0 评论 -
常量综述(一)
常量在C++里面是一个很重要的概念,有很多细节的地方很容易忽略,这里我根据《C++编程思想》总结了一下。1.出现的历史 常量最普遍的用法是值替代,在C语言里我们用宏来定义常量: #define MAX 100 但这是预编译的,也就是说在编译时只是简单宏展开,并不检查宏的语法是否正确。所以在C++里引入了const来定义常量,原创 2007-01-24 13:08:00 · 522 阅读 · 0 评论 -
重载赋值运算符
在C++运算符重载中最麻烦的可能就是"="的重载了,尤其是类的层次很复杂时要涉及到很多成员的初始化问题。一. operator=的行为 首先我们要明确什么时候会调用operator= :如果对象还没有被创建,使用= 时会调用拷贝构造函数,否则使用赋值operator= 。 下面是operator=的一个简单应用#include iostream>usin原创 2007-03-09 15:04:00 · 596 阅读 · 0 评论 -
链表的模板实现
首先建立一个链表,需要注意的是用模板来写类的时候,必须将类定义和类声明都放在头文件里面,这个问题以前发邮件请教过Bjarne Stroustrup ,他说这是现代编译器的规定,但没具体解释。 下面是链表的实现: //LinkList.h#ifndef LINKLIST_H#define LINKLIST_H#include iostream>#ifndef原创 2007-03-17 10:33:00 · 695 阅读 · 0 评论 -
C++库大全
基础类1、 Dinkumware C++ Library 参考站点:http://www.dinkumware.comP.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobbs程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C+ +的产品中采用Dinkumware的库。转载 2007-07-16 17:09:00 · 1084 阅读 · 0 评论