2016-11-24 60 views
0
UserFile.open(cname + ".txt"); 
int numOfElements = name.size(); 

if (UserFile.is_open()) 
{ 
    name.push_back(cname); 
    pass.push_back(cpass); 
    posx.push_back(0); 
    posy.push_back(0); 
    id.push_back(numOfElements); 

    std::cout << "Your player name has been registered successfully." << std::endl; 
    UserFile << cname << ";" << cpass << ";" << "0" << ";" << "0"; 
} 

我已經得到這個了,向玩家添加玩家,甚至是numOfElements都能正常工作。我怎樣才能讀取代表玩家id的每個玩家的統計數據作爲向量中的第n個元素? 例子:向量元素ID的C++

else if (userInput == "stats") // Ignore the else 
{ 
    // Name is Allura. ID is stored too. Increments from 0 to work with the vector 
    // What can I do to make a way of showing information only in that nth element (like element 0 if player id is 0) etc? 
} 
+0

您是否在不同的向量中存儲不同的屬性(名稱,通過,pos)?你真的應該有一個結構向量;這是C++ – qxz

+1

你的問題有點不清楚。你想用給定的'id'找到玩家的索引嗎? – qxz

+0

玩家1和2註冊登錄。玩家1有0存儲在ID矢量和玩家2有1作爲ID存儲。玩家1類型統計。不想顯示兩個球員的統計數據,所以我需要該程序來知道要發送哪些信息。現在,因爲玩家1在id向量中存儲了0,所以我需要它找到該玩家的ID並將其用作名稱向量中的數組索引。姓名[編號] –

回答

1

首先,存儲的球員名單,你應該有對象的一個​​矢量:

struct Player { 
    std::string name, pass; 
    int posx, posy; 
    int id; 
    // etc. 
}; 

std::vector<Player> players; 

要將新玩家加入到這個列表中,可以push_back一個支撐-初始化列表的所有屬性:

players.push_back({cname, cpass, 0, 0, numOfElements /*, etc. */}); 

然後,如果您想找到一個給定的id(或其他財產)的球員,使用std::find_if(其求使所述給定的條件爲真第一個元素):

int id_to_find = ...; 
auto iterator = std::find_if(players.begin(), players.end(), [&](const Player& p) { 
    return p.id == id_to_find; 
}); 
if (iterator == players.end()) { 
    // the id wasn't found 
} else { 
    // the id was found 
    // (*iterator) is a reference to the Player object in the vector 
} 

此使用lambda expression(像在Python的λ或在JavaScript匿名功能)。如果您不熟悉迭代器的工作方式,請仔細閱讀;在C++中,它們幾乎總是被使用,而不是使用索引。

+0

謝謝qxz!是的,我在過去幾天瞭解了迭代器,並且瞭解瞭如何將它們用作向量和映射中的循環,但我現在對這些指針不太瞭解。何時使用*或&?我已經看到他們含糊不清地使用。另外,爲什麼find_if播放器對象之前的括號中的地址指針像so - > [&]? –

+0

另外一個問題,因爲我一直在研究..如果我要去你的結構方法,我怎麼能在Monster類中定義結構?在這裏我使用了類似這樣的東西:'void Monsters :: monsterAttack(Players&player)',結構是用&?定義的函數參數。 –

+0

lambda中的[&]稱爲捕獲列表;它定義了lambda內部可用的外部變量。使用'&'表示通過引用捕獲所有局部變量。這是需要能夠使用'id_to_find'。 [我鏈接的文章](http://blog.smartbear.com/c-plus-plus/c11-tutorial-lambda-expressions-the-nuts-and-bolts-of-functional-programming/)有一個很好的解釋lambda的細節。 – qxz