作者ric2k1 (Ric)
看板EE_DSnP
标题[情报] 写了一个 functional object 的参考程式...
时间Wed Jan 7 00:36:29 2009
根据 HW#9 改写了一下...
今天听不太懂 functional object 的人可以 download funcObj.tgz 下来研究一下:
http://0rz.tw/f45dP
重点有 ---
[main.cpp]
int main()
{
Graph gg(SIZE);
gg.readGraph();
gg.dfsTraverse(DoPrint());
<== 这是呼叫什麽?
DoGenList doList(SIZE);
<== 呼叫 constructor 还是 operator()?
gg.dfsTraverse(doList);
<== 为什麽不直接 gg.dfsTraverse(DoGenList()) ?
cout << "There are " << doList.size() << " vertices in the graph!!\n";
system("pause");
}
[graph.h]
class DoVertex
{
public:
DoVertex() {}
virtual ~DoVertex() {}
virtual void operator() (Vertex *) const = 0;
};
class DoPrint : public DoVertex
{
public:
void operator() (Vertex *) const;
};
class DoGenList : public DoVertex
{
public:
DoGenList(unsigned n) { _list.reserve(n); }
void operator() (Vertex *) const;
unsigned size() const { return _list.size(); }
private:
mutable vector<Vertex *> _list;
<== What is mutable? Why?
};
[graph.cpp]
void Graph::dfsTraverse(const DoVertex& doV)
{
Vertex::incGlobalRef();
_root->dfsTraverse(doV);
}
void Vertex::dfsTraverse(const DoVertex& doV)
{
if (isGlobalRef()) return; // visited
setToGlobalRef();
for (unsigned i = 0; i < _numToVertices; ++i)
_toVertices[i]->dfsTraverse(doV);
doV(this);
}
void DoPrint::operator() (Vertex *v) const
{
cout << 'v' << v->getId();
unsigned n = v->getNumToVertices();
if (n != 0) {
cout << " (";
for (unsigned i = 0; i < n; ++i)
cout << 'v' << v->getToVertex(i)->getId() << ' ';
cout << '\b' << ')';
}
cout << endl;
}
void DoGenList::operator() (Vertex *v) const
{
_list.push_back(v);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.47.139
1F:推 bonoshi:想问一下,vector<Vertex *>、_list.reserve() 01/12 22:50
2F:→ bonoshi:_list.push_back(v)有哪些功能?从以前就有一直看到vector 01/12 22:52
3F:→ bonoshi:不过一直看不大懂 01/12 22:52
4F:→ ric2k1:They are part of STL (Standard Template Library) 01/12 23:11
5F:→ ric2k1:明天会教... 01/12 23:11
7F:→ bonoshi:vector的简单教学,原来它是一个模拟的阵列,不过看起来 01/12 23:51
8F:→ bonoshi:功能非常丰富,其中像是size()、begin()和end()老师之前有 01/12 23:54
9F:→ bonoshi:当成作业让我们练习过 01/12 23:54
10F:→ ric2k1:嗯嗯, STL 很好用, 学写程式必备! 01/13 00:29
12F:→ ric2k1:我都拿它来当 STL 的字典来查, 尤其是 Table of Contents 01/13 00:31