gpt4 book ai didi

c++ - 使用指针或引用检查是否包含对象

转载 作者:行者123 更新时间:2023-11-30 05:30:18 26 4
gpt4 key购买 nike

我有一个模拟类,它拥有一个传感器 vector 。您更喜欢 containsSensor1(const Sensor* iSen) 还是 containsSensor2(const Sensor& iSen) 来检查是否包含传感器?一般来说,我总是更喜欢 const 引用函数,但在这种情况下,我不确定哪个更方便。

#include <vector>
#include <memory>
#include <algorithm>
#include <iostream>

class Sensor
{
};

class Simulation
{
std::vector<std::unique_ptr<Sensor>> sensors;

public:
void addSensor(std::unique_ptr<Sensor> iSen)
{
sensors.push_back(std::move(iSen));
}
bool containsSensor1(const Sensor* iSen) const
{
bool rv = false;
for (auto itr = sensors.begin(); itr != sensors.end(); ++itr)
{
if (itr->get() == iSen)
{
rv = true;
break;
}
}
return rv;
}
bool containsSensor2(const Sensor& iSen) const
{
bool rv = false;
for (auto itr = sensors.begin(); itr != sensors.end(); ++itr)
{
if (itr->get() == &iSen)
{
rv = true;
break;
}
}
return rv;
}
};

int main()
{
std::unique_ptr<Sensor> sen1 = std::make_unique<Sensor>();
const Sensor* sen1Ptr = sen1.get();
Simulation sim;
sim.addSensor(std::move(sen1));

bool contains1 = sim.containsSensor1(sen1Ptr);
bool contains2 = sim.containsSensor2(*sen1Ptr);

std::cout << contains1 << "\n" << contains2 << std::endl;
return 0;
}

更新:我不想检查对象是否相等。我只想知道之前添加的传感器是否还包含在模拟对象中(现实中也有removeSensor函数)

最佳答案

我认为从引用方法中可以更清楚地看出您正在尝试在模拟中查找匹配的传感器对象,而不是试图匹配指针本身。

使用 vector<Sensor> 可能不那么复杂然后使用传感器移动构造函数将传感器移动到 vector 中。那么你肯定会使用引用方法。将其与 std::find 结合起来检查对象是否存在于 vector 中。

关于c++ - 使用指针或引用检查是否包含对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36017779/

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