如何在向量中的元素上创建指针/引用?

dro*_*pky 6 c++ pointers reference vector

我有两个向量,对于某些元素(不是全部),我需要将它们连接起来〜如果我在一个向量中删除/更改此元素,则应该在两个向量中删除/更改它。

类似于指针的东西:

int r = 10;
int *p= &r;
*p = 3;
Run Code Online (Sandbox Code Playgroud)

例如,在下一个代码中,应将 myvector2[0].a 更改为 7。

#include <iostream>
#include <vector>

using namespace std;

struct elt {
    int a, b, c;
};

int main()
{

    vector<elt> myvector;
    vector <elt> myvector2;
    elt elt1 = {1,3,3};

    myvector.push_back(elt1);
    elt *elt2 = &elt1;
    myvector2.push_back(*elt2);

    myvector[0].a=7;

    cout << myvector[0].a << endl; //7
    cout << myvector2[0].a << endl; //1

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能使这成为可能?请帮忙!!!

Dar*_*con 5

正如 tgmath 所解释的,问题是你最终会在向量中得到两个不同的对象,因为标准容器按值存储元素。我建议您使用共享指针来正确维护对象的生命周期(注意这使用了 C++11 功能):

#include <iostream>
#include <vector>
#include <memory>

struct elt {
    int a, b, c;
};

int main()
{
    std::vector<std::shared_ptr<elt>> myvector;
    std::vector<std::shared_ptr<elt>> myvector2;
    auto elt1 = std::make_shared<elt>(elt {1,3,3});

    myvector.push_back(elt1);
    myvector2.push_back(elt1);

    myvector[0]->a=7;

    std::cout << myvector[0]->a << std::endl; //7
    std::cout << myvector2[0]->a << std::endl; //7

    return 0;
}
Run Code Online (Sandbox Code Playgroud)