"포인터"에 대한 주제를 읽었지만 여전히 질문이 있습니다. v.edge.begin()
이후포인터를 사용하는 조건
// 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
이 포인터로 볼 수있는 반복자를 선언하는 경우는, vector<Edge>
의 첫 번째 Edge
목적이지만, &(*it)
무엇인가?
질문 2 g
, &g
, *g
의 차이점은 무엇입니까? 나의 이해에서
:
&g
는 메모리 주소입니다.*g
은 그래프 개체를 가리키는 포인터 포인터이므로 Graph * g = new Graph();를 사용할 수 있습니다.조건 1 :
Graph *g = new Graph(); g->gid = 0;
조건
g
는 *의 g 및 g 사이의 차이가 예를 들어 우리가 두 개의 조건이 동일하고, 사용하는 방법 인 그래픽 오브젝트
인 2 :
Graph g;
g.gid = 0;
질문 3
아래의 의미는 무엇입니까? 우리가 g[it->to].label
를 사용하는 이유
Graph &g
이 아니라 매우 &g[it->to].label
감사합니다 :)
적절한 책을 골라야합니다. 너는 많은 질문을 가지고있다. –