gpt4 book ai didi

c++ - 使用 vector::back() 修改 vector 元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:55 24 4
gpt4 key购买 nike

我有以下结构:

#include <string>
#include <vector>

struct A {
std::string name;
int id;
};

和一个包含 A 元素的 vector :

std::vector<A> a_vector;

我正在尝试将一个元素附加到 vector 并使用以下方法更改其值:

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.
}

其中 get_a 定义为:(代码已简化,在实际代码中我确实需要传递 a 作为参数而不是将其作为返回)

void get_a(A& a) //This function normally assigns a in different ways
{
a_vector.emplace_back();
a = a_vector.back();
}

如何使 a 元素与 vector 中的元素相同?我真的必须使用指针吗?

最佳答案

A a;
a = a_vector.back();

在这里,您正在将 a_vector.back() 复制分配给 a。这不是引用,因此修改 a 不会修改 vector 内的元素。

你想要这个:

A& a = a_vector.back();

如果您不能立即使用a_vector.back() 初始化您的引用,请考虑使用指针...

A* a;

// ...

a = &a_vector.back();

// ...

something(*a);

...或索引:

std::size_t a_idx;

// ...

a_idx = a_vector.size() - 1;

// ...

something(a_vector[a_idx]);
  • 如果您知道 vector 不会调整大小,指针将正常工作。如果 vector 调整大小,迭代器和指针将失效。

  • 即使调整 vector 大小,索引也能正常工作,只要不移除/移动元素即可。

关于c++ - 使用 vector::back() 修改 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47591641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com