- 浏览: 512610 次
- 性别:
- 来自: 北京
最新评论
-
jkxydp:
算法运行的结果根本就不对。
BM算法. -
soarwindzhang:
感谢博主的分享,我今天看了您的UFSET非递归的路径压缩时感觉 ...
并查集 -
zhangning290:
楼主好像只考虑了坏字符规则,。没有考虑好后缀
BM算法. -
lsm0622:
文字描述有错误 误导新学者
求有向图的强连通分量(scc):Tarjan算法 -
knightchen:
博主,你太强了!这篇文章对我学习C++多线程很有帮助!谢谢
并发学习之一_windows下ZThread在CodeBlocks上的安装与配置
文章列表
1,引起混淆基于一个事实:他们都允许以不同的形式调用同一个函数名称。
如:
void f(); // f is overloaded
void f(int x);
f(); // calls f()
f(10); // calls f(int)
void g(int x = 0); // g has a default
...
1,成员函数和非成员函数最大的区别:前者可以是虚拟函数,而后者不可以。
2,关于成员函数和非成员函数:
例子:
class Rational
{
public:
Rational(int numerator = 0, int denominator = 1);
int numerator() const;
int denominator() const;
....
const Rational operator*(const Rational& rhs) const;
private:
...
};
注意下面的调用:
Rational oneEigh ...
1,实现的基本功能:
客户端:发送一行文本给服务器,服务器显示收到的字节数,并返回收到的内容给客户端。
2,一个单进程的实现实例:
file echo.c:
#include "csapp.h"
void echo(int connfd)
{
size_t n;
char buf[MAXLINE];
rio_t rio;
Rio_readinitb(&rio, connfd);
while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0)
...
1,先看一个例子:
class Month {
public:
static const Month Jan() { return 1; }
static const Month Feb() { return 2; }
...
static const Month Dec() { return 12; }
int asInt() const // for convenience, make
{ return monthNumber; } // it possible to convert
...
1,inline函数:看起来像函数,动作起来像函数,比宏好得多,不需要蒙受函数调用带来的额外负担.
而且,编译器最佳化机制通常用来浓缩那些不含函数调用动作的代码,所以当你inline一个函数时,编译器就有能力在函数体身上执行某种最佳化.
2,inline函数背后的观念:将对函数的每一个调用行为都用函数代码取代之.
显然这么做,会增加你目标代码的大小.
inline行为造成的程序代码膨胀可能会导致病态的换页,或是降低cache的命中率.
3,特别注意的是:
inline指令就像register指令一样,只是对编译器的一种提示,而不是强制命令.
大部分编译器会拒绝将复杂的函数(内含循环或递归)i ...
1,解决之道:
将其声明为private,而且压根儿就不要定义它.
如:
template<class T>
class Array {
private:
// Don't define this function!
Array& operator=(const Array& rhs);
...
};
2,这种方法适用于任何一个由编译器产生的函数.
1,对象的by value传递,实际上就是copy constructor.
例如:
Student returnStudent(Student s) { return s; }
Student plato; // Plato studied under Socrates
returnStudent(plato); // call returnStudent
首先调用copy constructor将s初始化,然后copy constructor再次被调用,初始化返回值.
然后destructor s,还要destructor ...
1,只要某值真的保持不变,就应该明确表示出来,这样一来便可以获得编译器的帮助.
2,const最具威力的用途用在函数声明上.
3,令函数返回一个常量值,可以降低client的错误,有不至于放弃效率.
如:
const Rational operator*(const Rational& lhs ...
1,"一致性"的角度:client存取某个member时,不用考虑是否使用小括号,因为所有东西都是函数.
2,使用函数可以更精确地掌握data member的可存取性.
让data member成为public,则每个人都可以直接读写它.
如果通过函数,可以实现"不处理","只读处理","可读可写","只写".
3,结论:把data members置于公开接口,等于是自找麻烦.应该将所有的data members隐藏起来.
1,所谓完满:允许clients做他们可以合理要求的任何事情.
2,最小化:尽可能让函数个数最少,不至于有任何两个member function功能重叠.
3,为什么要最小化呢?
(1)接口函数越多,潜在客户越不容易了解它.
(2可维护性较差.class内函数越多,越不容易避免到处重复的代码.
(3)长长的class定义,会导致长长的头文件,导致编译时间过长.
因此,为接口增加函数时,并非不需成本.
你得谨慎考虑其额外的复杂性,可理解性,可维护性,以及编译速度的成本.
4,不要忘记,对实用目的而言,friend函数时class接口的一部分,这意味着friend函数应该被纳入class接口的完 ...
类与函数之设计和声明
- 博客分类:
- effective c++
如何设计一个高效率的classes呢?考虑下面的问题:
(1)对象应该如何产生和销毁?
影响你的constructor,destructor,operator new,operator new[],operator delete,和operator delete[]的设计.
(2)对象的初始化和赋值有何不同?
影响你的constructor和assignment的行为.
(3)对象by value传递
copy constructor定义值传递的意义.
(4)对新型别而言,合法值的规范是什么?
影响你的member function内做哪些错误检验,也会影响函数抛出的exception.
(5) ...
1,两个理由,赋值操作必须特别谨慎可能发生的别名问题.
(1)效率,赋值操作中,如果一开始就检测到"自己赋值给自己",可以立刻返回.
(2)assignment运算符在为其左侧对象配置新资源之前,通常必须先将原先配置给左侧对象的所有资源释放掉.
如:
String& String::operator=(const String& rhs)
{
delete [] data; // delete old memory
// allocate new memory and copy rhs's value into it
data = new ...
1,先看一个错误的情况:
class Base
{
public:
Base(int initialValue = 0): x(initialValue) {}
private:
int x;
};
class Derived: public Base
{
public:
Derived(int initialValue)
: Base(initialValue), y(initialValue) {}
Derived& operator=(const Derived& rhs);
private:
int y;
};
Derived& D ...
1,assignment动作可以串连在一起.
string w, x, y, z;
w = x = y = z = "Hello";
赋值使用右结合律,上述行动串被解析成这样:
w = (x = (y = (z = "Hello")));
或是:
w.operator=(x.operator=(y.operator=(z.operator=("Hello"))));
可见:y.operator=的引数就是前次调用operator=后的传回值.
2,常犯的错误:
(1)令opertor=传回void,它会妨碍assignment动作 ...
先看一个例子:
class EnemyTarget
{
public:
EnemyTarget() { ++numTargets; }
EnemyTarget(const EnemyTarget&) { ++numTargets; }
~EnemyTarget() { --numTargets; }
static size_t numberOfTargets()
{ return numTargets; }
virtual bool destroy(); // returns success of
...