2015-10-30 13 views
0

目前我有拿着到所有連接到特定的房間房間引用一個向量:C++ - 如何將多個值插入向量中,每個值都有不同的索引?

rooms.at(1).connectedRooms = { &rooms.at(2), &rooms.at(3), &rooms.at(4), &rooms.at(5)}; 

不過,我想用我的枚舉爲指標,而不是一個整數,所以不是rooms.at(1).connectedRooms.at(0)我會用rooms.at(1).connectedRooms.at(NORTH)這使得它更有意義,並且還允許在開關語句中更容易和易讀地使用它。

枚舉看起來像

enum directions { NORTH, EAST, SOUTH, WEST}; 

有沒有辦法做到這一點在同一行,例如(此代碼不能正常工作,但它是我想要做什麼):

rooms.at(1).connectedRooms[NORTH, EAST, SOUTH, WEST] = {&rooms.at(2), &rooms.at(3), &rooms.at(4), &rooms.at(5)}; 

,而不是更長的時間

rooms.at(1).connectedRooms[NORTH] = &rooms.at(2); 
rooms.at(1).connectedRooms[EAST] = &rooms.at(3); 
rooms.at(1).connectedRooms[SOUTH] = &rooms.at(4); 
rooms.at(1).connectedRooms[WEST] = &rooms.at(5); 

感謝

+0

你可以使用循環或寫一個幫助函數。 – DigitalNinja

回答

1

您可以將整數值指派給你的枚舉常量:

enum directions { NORTH = 0, EAST = 1, SOUTH = 2, WEST = 3 }; 

,然後你把分配的是:

rooms.at(1).connectedRooms = { &rooms.at(2), &rooms.at(3), &rooms.at(4), &rooms.at(5)}; 

編輯:按下面的評論,請注意,你的方式持有向量成員的指針是非常危險的,不被認爲是良好的做法。請記住,一個std :: vector是動態的,所以它可能會決定隨時改變它的內存區域的位置,比如當它增長時...

+0

請給OP增加一個警告,說明如何獲取向量元素的地址是一件非常冒險的事情。 – user4581301

+0

@ user4581301我同意你的原則,但在我看來,這遠遠超出了具體問題。但你的評論是有用的,我希望這個OP不會錯過它:)。編輯:好吧會添加一些警告 –

+0

這不會代替'connectedRooms'中的整個矢量嗎?如果裏面還有其他東西呢? –

0

假設您將保持您的枚舉和空間值定義按順序,你可以嘗試這種方法:

auto& vec = rooms.at(1).connectedRooms; 
for (int i = 0; i < 4; i++) 
{ 
    vec[i] = &rooms.at(i + 2); 
} 
相關問題