所以我有一个Player类型的对象向量。如果我尝试在该向量上使用std :: find_if并使用一个lambda表达式,只有当该名称是播放器是我要检查的名称时才返回true,如果向量为空,它将首次运行(如迭代器是nullptr),但是一旦我在向量中添加了一个Player对象,find_if将返回一个填充了随机坏数据的迭代器。
我的代码:
auto player = find_if(m_playerList.begin(), m_playerList.end(), [name](Player& p)
{
return p.Name == name;
});
if (player._Ptr != nullptr)
{
// Do stuff
}
else
{
Player newPlayer;
newPlayer.Name = name;
m_playerList.push_back(newPlayer);
}
所以在这个函数的第一次迭代中,播放器是nullptr,因为向量不包含任何元素。在第二次迭代中,如果我使用相同的名称进行搜索,它会在向量中找到它,但是如果我使用不同的名称进行搜索,则会返回一个带有错位的随机数据的对象,并检查“if(player._Ptr!= nullptr) )“通过。
问题是,是什么原因造成的?我是否正确检查“播放器”对象以确定find_if是否实际在向量中找到了有效对象?
答案 0 :(得分:2)
您编写的代码不可移植,因为它使用_Ptr
的特定于实现的vector::iterator
成员,因此该成员没有nullptr
的要求。变化
if (player._Ptr != nullptr)
到
if (player != m_playerList.end())