假设我想声明一个对象向量。我可以这样做 -如何高效,正确地在对象中插入对象
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