我已閱讀有關「指針」的主題,但我仍然有一些問題。使用指針的條件
// graph.cpp
struct Edge {
int from;
int to;
unsigned int id;
Edge(): from(0), to(0), id(0) {};
};
struct Vertex {
int label;
vector<Edge> edge;
};
class Graph: public vector<Vertex> {
int gid;
unsigned int edge_size;
};
如果我聲明在另一個文件
bool get_forward_root (Graph &g, Vertex &v, vector<Edge*> &result) {
for(vector<Edge>::iterator it = v.edge.begin(); it != v.edge.end(); it++) {
if(v.label <= g[it->to].label)
result.push_back(&(*it));
}
}
在我的理解,it
可以被視爲指針迭代器,因爲v.edge.begin()
是vector<Edge>
第一Edge
對象,但什麼是&(*it)
?
問題2. g
,&g
,*g
有什麼區別?
在我的理解:
&g
是內存地址。*g
是一個Graph指針指向一個圖對象,所以我們可以使用Graph * g = new Graph();g
是一個圖表對象
* G和G之間的差是我們如何使用,例如,兩個條件是相同的:
條件1:
Graph *g = new Graph();
g->gid = 0;
條件2:
Graph g;
g.gid = 0;
問題3。
下面的含義是什麼?
Graph &g
,爲什麼我們使用g[it->to].label
不&g[it->to].label
非常感謝:)
你應該選擇一本適當的書。你有很多問題。 – 2012-03-05 13:33:49