2017-08-20 3 views
0

私はグラフをC++で実装する方法を学んでいます。私は、次のコードを見に行きました。誰もシンボル*と&の機能は、データ型 "頂点"と "文字列"の動作を説明することができますか?*、&symbolの目的はデータ型に影響しますか?

#include <iostream> 
#include <vector> 
#include <map> 
#include <string> 

using namespace std; 

struct vertex { 
    typedef pair<int, vertex*> ve; 
    vector <ve> adj; //cost of edge, distination to vertex 
    string name; 
    vertex (string s) : name(s) {} 
}; 

class gragh 
{ 
public: 
    typedef map<string, vertex *> vmap; 
    vmap work; 
    void addvertex (const string&); 
    void addedge (const string& from, const string&, double cost); 
}; 

void gragh::addvertex (const string &name) 
{ 
    vmap::iterator itr = work.find(name); 
    if (itr == work.end()) 
    { 
    vertex *v; 
    v = new vertex(name); 
    work[name] = v; 
    return; 
    } 
    cout << "Vertex alreay exist"; 
} 

int main() 
{ 
    return 0; 
} 

答えて

0

「*」は、何かを参照解除することを意味します。つまり、アドレスがポインタにある変数のアドレスに移動します。

int x=*p;

これはxpを指している誰にメモリアドレスの値を持つことを意味します。

x=&p;

これはxは、そのメモリ位置p存在のアドレスを有することを意味します。

+0

ありがとうございます。このコード行で&記号はどうですか:void addvertex(const string&)それはまた、何かを逆参照しているのでしょうか? – namcao

+0

これは、これが受け入れる文字列が参照によって受け入れられることを意味します。つまり、文字列の変更は関数呼び出しの後もそのまま残ります。あなたの問題を解決した場合は、この回答を受け入れてください。 – Asim

関連する問題