int main() {
//class B and C inherits from A
vector<B> b;
vector<C> c;
vector<A*> a;
{
B b_temp;
b.push_back(b_temp);
C c_temp;
c.push_back(c_temp);
a.push_back(&b[0]);
a.push_back(&c[0]);
b.push_back(b_temp);//this will break a, since it will move the b vector. is there an efficent way to move the pointers with it?
//pointer vector a's order is important
}
system("PAUSE");
return 0;
};
向要指向的向量b
添加新元素时,它将展开并分配新内存。然后指针向量a
将指向坏内存。有没有有效的方法重新指向先前的向量?
a
指向几个不同的向量,其顺序很重要。添加新元素时,我希望它保持相同的顺序并最后添加新元素。
答案 0 :(得分:4)
std::deque
和vector
使用b
代替c
。它具有与vector
(O(1)随机访问等)大部分相同的属性,并且几乎同样有效,push_back
从不移动其基础数据。
答案 1 :(得分:3)
我喜欢使用不同标准容器的想法,但也可能值得考虑在向量之间共享对象。这可能代表您正在尝试做得更好,并且可以更容易编程,因为您不必担心指向解除分配/移动内存的指针。 (你需要C ++ 11用于共享指针,或者你可以使用boost)..
#include <memory>
#include <vector>
int main(void){
using std::shared_ptr;
using std::vector;
vector<shared_ptr<A>> a;
{
vector<shared_ptr<B>> b;
vector<shared_ptr<C>> c;
shared_ptr<B> b_temp(new B);
b.push_back(b_temp);
shared_ptr<C> c_temp(new C);
c.push_back(c_temp);
a.push_back(b[0]);
a.push_back(c[0]);
shared_ptr<B> b_temp2(new B);
b.push_back(b_temp2);
}
// the two objects in a can still be used here
return 0;
};