Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何保持指向其他向量中项目的指针在向量中有效 intmain(){ //类B和C继承自A 载体b; 载体c; 载体a; { B_温度; b、 推回(b_温度); C C_温度; c、 推回(c_温度); a、 向后推(&b[0]); a、 推回(&c[0]); b、 push_back(b_temp);//这会打断a,因为它会移动b向量。有没有一种有效的方法来移动指针? //指针向量a的顺序很重要 } 系统(“暂停”); 返回0; };_C++_Pointers_Memory_Vector - Fatal编程技术网

C++ 如何保持指向其他向量中项目的指针在向量中有效 intmain(){ //类B和C继承自A 载体b; 载体c; 载体a; { B_温度; b、 推回(b_温度); C C_温度; c、 推回(c_温度); a、 向后推(&b[0]); a、 推回(&c[0]); b、 push_back(b_temp);//这会打断a,因为它会移动b向量。有没有一种有效的方法来移动指针? //指针向量a的顺序很重要 } 系统(“暂停”); 返回0; };

C++ 如何保持指向其他向量中项目的指针在向量中有效 intmain(){ //类B和C继承自A 载体b; 载体c; 载体a; { B_温度; b、 推回(b_温度); C C_温度; c、 推回(c_温度); a、 向后推(&b[0]); a、 推回(&c[0]); b、 push_back(b_temp);//这会打断a,因为它会移动b向量。有没有一种有效的方法来移动指针? //指针向量a的顺序很重要 } 系统(“暂停”); 返回0; };,c++,pointers,memory,vector,C++,Pointers,Memory,Vector,向指向的向量b添加新元素时,它将扩展并分配新内存。指针向量a将指向坏内存。有没有有效的方法重新指向先前的向量 a指向几个不同的向量,其顺序很重要。添加新元素时,我希望它保持相同的顺序,最后添加新元素。对于b和c使用std::deque而不是vector。它与vector(O(1)随机访问等)具有大多数相同的属性,并且几乎同样有效,push_-back从不移动其底层数据。我喜欢使用不同标准容器的想法,但也可能值得考虑在vector之间共享对象。这可能代表了您正在努力做得更好,并且可能更容易编程,因

向指向的向量
b
添加新元素时,它将扩展并分配新内存。指针向量
a
将指向坏内存。有没有有效的方法重新指向先前的向量


a
指向几个不同的向量,其顺序很重要。添加新元素时,我希望它保持相同的顺序,最后添加新元素。

对于
b
c
使用
std::deque
而不是
vector
。它与
vector
(O(1)随机访问等)具有大多数相同的属性,并且几乎同样有效,
push_-back
从不移动其底层数据。

我喜欢使用不同标准容器的想法,但也可能值得考虑在vector之间共享对象。这可能代表了您正在努力做得更好,并且可能更容易编程,因为您不需要担心指针进入释放/移动内存的可能性。(共享指针需要C++11,也可以使用boost)

#包括
#包括
内部主(空){
使用std::shared_ptr;
使用std::vector;
载体a;
{
载体b;
载体c;
共享ptr b_temp(新b);
b、 推回(b_温度);
共享c_ptr c_temp(新c);
c、 推回(c_温度);
a、 推回(b[0]);
a、 推回(c[0]);
共享的b_ptr b_temp2(新b);
b、 推回(b_temp2);
}
//a中的两个对象仍然可以在此处使用
返回0;
};

能否将
b
c
改为
std::list
?或者,如果元素总数已知,则使用
vector::reserve
预分配内存。“从不”是一个很长的时间<代码><当删除不在末尾的元素时,code>deque移动元素。
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;
};
#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;
};