C++ 指向引用的指针:更改原始值

C++ 指向引用的指针:更改原始值,c++,reference,C++,Reference,我在某处存储了一个人和物体的向量 std::vector<People> people; 请注意,我保持原始的人物向量不变。存储指针的目的是降低排序的成本。现在我的问题是,最后一个作业,它是否改变了原始的人物向量?从我阅读代码的方式来看,应该是这样,但实际上我看到了相反的结果?对不起,我不能在这里使用真正的代码 最后一个作业,是不是改变了原来的人物向量 视情况而定 如果且仅当getSomeSpecialGuyFrom返回对原始人物向量中对象的引用,且引用/指针未失效,则答案为是。如

我在某处存储了一个人和物体的向量

std::vector<People> people;
请注意,我保持原始的人物向量不变。存储指针的目的是降低排序的成本。现在我的问题是,最后一个作业,它是否改变了原始的人物向量?从我阅读代码的方式来看,应该是这样,但实际上我看到了相反的结果?对不起,我不能在这里使用真正的代码

最后一个作业,是不是改变了原来的人物向量

视情况而定


如果且仅当
getSomeSpecialGuyFrom
返回对原始人物向量中对象的引用,且引用/指针未失效,则答案为是。

如果您的做法与您期望看到的不同,请将其张贴到代码中。现在我们不知道出了什么问题。另一方面,在向量中存储指向元素的指针很少是个好主意,因为这些指针可能会失效。它应该在
向量中更改
。如果这没有发生,那么您所展示的范围之外的东西正在改变结果。您必须共享一个。即使它适用于您给定的情况,从
std::vector
获取一个引用并将其指针存储在另一个向量中也是非常糟糕的做法。如果
std::vector
std::vector newlist的生存期内为
const
,则可以
以确保它不会更改。@Tabeautifulworld我的注释仍然有效,但显示的代码中似乎没有该错误。编辑:
getSomeSpecialGuyFrom
是否通过引用获取向量?@t.niese但关键是要找到要更改的
People
,因此
People
不能是
const
。在我看来,这个问题不值得回答。OP声称“从我阅读代码的方式来看,它应该是这样的,但实际上我看到了相反的结果”,但并没有给出MCVE。
std::vector<People*> newlist;
People& specialPeople = getSomeSpecialGuyFrom(people); // get a referece 
newlist.push_back(&specialPeople);
// New I sort the newlist by some property, assuming it's not empty:
std::nth_element(newlist.begin(),
                 newlist.begin() + 1,
                 newlist.end(),
                 [](const People* p1,
                    const People* p1) {
                   return p1->reputation > p2->reputation;
                 });
newlist[0]->name = "Best one";