摘要:
#include <queue>#include <string>#include <vector>#include <iostream>using namespace std;vector<int> V;struct Node { int len; Node* right; Node* left; Node(int x = 0) : len(x), right(NULL), left(NULL) {}};class Op {public: bool operator()(Node* const lhs, Node* const rh 阅读全文
posted @ 2012-06-29 17:27
byfei
阅读(176)
评论(0)
推荐(0)
摘要:
1.哈夫曼树的基本概念最优二叉树,也称哈夫曼(Haffman)树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。那么什么是二叉树的带权路径长度呢?在前面我们介绍过路径和结点的路径长度的概念,而二叉树的路径长度则是指由根结点到所有叶结点的路径长度之和。如果二叉树中的叶结点都具有一定的权值,则可将这一概念加以推广。设二叉树具有n 个带权值的叶结点,那么从根结点到各个叶结点的路径长度与相应结点权值的乘积之和叫做二叉树的带权路径长度,记为:其中Wk 为第k 个叶结点的权值,Lk 为第k 个叶结点的路径长度。如图6.16 所示的二叉树,它的带权路径长度值WPL=2×2+ 阅读全文
posted @ 2012-06-29 17:26
byfei
阅读(1110)
评论(0)
推荐(0)
摘要:
typedef vector IntArray;IntArray array;array.push_back( 1 );array.push_back( 2 );array.push_back( 2 );array.push_back( 3 );// 删除array数组中所有的2for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor ){if( 2 == *itor ) array.erase( itor );}答:同样有缺少类型参数的问题。另外,每次调用“array.erase( itor );”,被删除元素 阅读全文
posted @ 2012-06-29 16:56
byfei
阅读(131)
评论(0)
推荐(0)
摘要:
以下代码有什么问题? typedef vector IntArray;IntArray array;array.push_back( 1 );array.push_back( 2 );array.push_back( 2 );array.push_back( ... 阅读全文
posted @ 2012-06-29 16:56
byfei
阅读(61)
评论(0)
推荐(0)
摘要:
float a = 1.0f;cout << (int)a << endl;cout << (int&)a << endl;cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?float b = 0.0f;cout << (int)b << endl;cout << (int&)b << endl;cout << boolalpha << ( (in 阅读全文
posted @ 2012-06-29 16:54
byfei
阅读(231)
评论(0)
推荐(0)
摘要:
struct CLS{int m_i;CLS( int i ) : m_i(i) {}CLS(){CLS(0);}};CLS obj;cout << obj.m_i << endl;答:不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。 阅读全文
posted @ 2012-06-29 16:50
byfei
阅读(175)
评论(0)
推荐(0)
摘要:
vector array;array.push_back( 1 );array.push_back( 2 );array.push_back( 3 );for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历array数组{cout << array[i] << endl;}答:首先数组定义有误,应加上类型参数:vector<int> array。其次vector::size_type被定义为unsigned int,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导致循环 阅读全文
posted @ 2012-06-29 16:47
byfei
阅读(462)
评论(0)
推荐(0)
摘要:
unsigned intconst size1= 2;char str1[ size1 ];unsigned int temp= 0;cin >> temp;unsigned intconst size2= temp;char str2[ size2 ];答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。 阅读全文
posted @ 2012-06-29 16:45
byfei
阅读(237)
评论(0)
推荐(0)
摘要:
sizeof是算符,strlen是函数。 sizeof 求指针类型的数据长度结果都是4 strlen只能用char*做参数,且必须是以''\0''结尾的。 以下代码中的两个sizeof用法有问题吗? void UpperCase(char str[] ... 阅读全文
posted @ 2012-06-29 16:40
byfei
阅读(58)
评论(0)
推荐(0)
摘要:
void UpperCase(char str[] ){for( size_t i=0; i<sizeof(str)/sizeof(str[0]);++i )if( 'a'<=str[i]&& str[i]<='z' )str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " <<sizeof(str)/sizeof(str[0])<< endl;Upp 阅读全文
posted @ 2012-06-29 16:39
byfei
阅读(413)
评论(0)
推荐(0)
摘要:
char str1[] = "abc";char str2[]= "abc";const char str3[] = "abc";const char str4[] = "abc";const char* str5= "abc";const char* str6= "abc";cout << boolalpha<< ( str1==str2 )<< endl; // 输出什么?cout << boolalpha<< 阅读全文
posted @ 2012-06-29 16:35
byfei
阅读(240)
评论(0)
推荐(0)
摘要:
介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如#define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销 阅读全文
posted @ 2012-06-29 15:04
byfei
阅读(456)
评论(0)
推荐(0)