假設我想聲明一個對象向量。我可以這樣做 -如何高效,正確地在對象中插入對象
vector<mynode> nodes;
但是,如果mynode的大小很大,這將是不好的。所以我想這樣做 -
vector<mynode*> nodes;
但上述聲明有一個明顯的問題,我存儲的地址,它根本不安全。舉例來說,如果我在福爾循環添加對象 -
vector<mynode*> nodes;
for (int i=0; i<10; i++)
{
mynode mn;
nodes.push_back(&mn);
}
這將導致錯誤,因爲我不能保證如果指針的內容實際上是確定。
所以,我決定使用此聲明 -
vector<mynode&> nodes;
for (int i=0; i<10; i++)
{
mynode mn;
nodes.push_back(mn);
}
是這樣行嗎?安全?它提供了第一行本身的彙編。請建議一些將對象存儲在向量中的有效方法。非常感謝。
不,存儲引用和存儲指針一樣糟糕。如果頻繁插入並且會減慢程序速度,請考慮使用另一個數據結構('deque'?)或'std :: vector>'。另外:您的問題名稱與問題本身不符。 –
2012-03-27 18:14:26
不要擔心優化矢量,除非您的剖析顯示它是一個實際問題。第一種形式'矢量'是最好的。 –
2012-03-27 18:15:53
@MooingDuck,存儲引用是不可能的,因爲引用不能被重新分配。 – 2012-03-27 18:16:32