作者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