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)
我怎样才能使这成为可能?请帮忙!!!
正如 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)