我有一个Foo *的向量。我放在里面的东西总是Foo *,没有多态性。
我使用指针向量,因为我尝试了一个列表并且它一直在崩溃。我需要能够在其他地方使用指针,因此Foo的常规向量将无效。
ex:b.add(& myRegularVec [6]); //当我添加更多时,这个指针不会有效。
问题是我需要vector的保留功能。现在,我有这样的功能:
void addRange(int quantity)
{
for (int i = 0; i < quantity; ++i)
{
Foo* obj = new Foo(i);
m_theVector.push_back(obj);
b.add(obj);
}
}
不幸的是,这引起了很多新的讨论,并且剖析器说它是瓶颈。
我无法使指针无效:成长我需要重做新的[]。
我可以做些什么来避免这么多新来电并让它更快?
由于
答案 0 :(得分:4)
您可以使用deque<Foo>
而不是vector<Foo*>
,因为deque在增长容器时不会使指针无效。
答案 1 :(得分:0)
我有一个Foo *的向量。我放在里面的东西总是Foo *,没有多态性。
如果没有多态性,那么你需要一个Foo
的向量,而不是Foo*
。您没有正确的理由在程序中使用Foo*
。所以忘记你目前在做什么,然后重新开始std::vector<Foo>
:
std::vector<Foo> m_theVector;
然后这样做:
void addRange(int quantity)
{
for (int i = 0; i < quantity; ++i)
{
m_theVector.push_back(Foo(quantity));
}
}
如果您因任何原因担心重新分配,请使用不会重新分配旧项目的std::list
。