gpt4 book ai didi

C++ std::find() 在寻址返回 vector 的类函数时出现意外行为

转载 作者:行者123 更新时间:2023-11-30 01:33:55 24 4
gpt4 key购买 nike

我有一道理论题。我有一个 Patient 类,其中有一个函数返回类本身的 vector Patient.getVars()

class Patient {
#... rest of class ...
std::vector<std::string> vVar;
public :
void addVar( std::string var )
{
vVar.push_back(var);
}
std::vector<std::string> getVars()
{
return vVar;
};
#... rest of class ...
}

我注意到,如果我使用 std::find() 检查调用类函数的 vector vVar 的元素:

if ( std::find ( vPatientClass[ posPz ].getVars().begin(), vPatientClass[ posPz ].getVars().end(), var_name ) == vPatientClass[ posPz ].getVars().end() ) {
# .... rest of code ....

当它实际上是不存在时,它告诉我它是PRESENT,反之亦然。

否则,如果我复制 vector 并在其上查找:

std::vector<std::string> vPzVars = vPatientClass[ posPz ].getVars();
if ( std::find ( vPzVars.begin(), vPzVars.end(), var_name ) == vPzVars.end() ) {
# .... rest of code ....

它的表现符合预期!这对我来说非常重要...有什么线索吗?

PS:我通过 [ posPz ] 位置来寻址 Patient 对象,因为 vPatientClassPatient 的 vector > 类对象。

提前感谢您的任何建议!

最佳答案

您的 getVars 成员正在返回内部 vector 的拷贝:

std::vector<std::string> getVars()
{
return vVar;
};

所以在您有问题的 std::find 调用中,您调用了 Patient::getVars() 3 次并获得了 vector 的 3 个不同拷贝。虽然值相同,但您从 begin()end() 获得的迭代器彼此不兼容。您可以通过引用返回您的 vector :

const std::vector<std::string>& getVars() const
{
return vVar;
};

关于C++ std::find() 在寻址返回 vector 的类函数时出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57299667/

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