ham*_*rti 1 c++ reference vector c++14
我有以下结构:
#include <string>
#include <vector>
struct A {
std::string name;
int id;
};
Run Code Online (Sandbox Code Playgroud)
并且包含A元素的向量:
std::vector<A> a_vector;
Run Code Online (Sandbox Code Playgroud)
我试图将一个元素附加到向量并使用以下内容更改其值:
void test()
{
A a;
get_a(a);
//Up to this point I thought modifying this a object would mean modifying the back element of the vector. But it doesn't work as planned, doing this:
a.id = 2; //Doesn't modify the id of the element in the vector.
}
Run Code Online (Sandbox Code Playgroud)
其中get_a定义为:(代码是简化的,在真正的代码中我真的需要传递一个as参数而不是将其作为返回)
void get_a(A& a) //This function normally assigns a in different ways
{
a_vector.emplace_back();
a = a_vector.back();
}
Run Code Online (Sandbox Code Playgroud)
如何让a元素与向量中的元素相同?我真的必须使用指针吗?
A a;
a = a_vector.back();
Run Code Online (Sandbox Code Playgroud)
在这里你是复制分配a_vector.back()给a.这不是引用,因此修改a不会修改向量内的元素.
你想要这个:
A& a = a_vector.back();
Run Code Online (Sandbox Code Playgroud)
如果您无法立即初始化参考a_vector.back(),请考虑使用指针...
A* a;
// ...
a = &a_vector.back();
// ...
something(*a);
Run Code Online (Sandbox Code Playgroud)
......或索引:
std::size_t a_idx;
// ...
a_idx = a_vector.size() - 1;
// ...
something(a_vector[a_idx]);
Run Code Online (Sandbox Code Playgroud)
如果您知道向量将不会调整大小,指针将正常工作.如果向量调整大小,则迭代器和指针将失效.
只要不移除/移动元素,即使向量调整大小,索引也能正常工作.