我有一个拥有传感器矢量的Simulation类。您希望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函数)
答案 0 :(得分:1)
我认为从参考方法中可以看出,您尝试在Simulation中查找匹配的Sensor对象,而不是尝试可能与指针本身匹配。
使用vector<Sensor>
然后使用传感器移动构造函数将Sensor移动到矢量中可能不那么复杂。那你肯定会使用参考方法。将其与std::find
组合以检查对象是否存在于向量中。
答案 1 :(得分:0)
这完全是主观的。我喜欢它的参考,但是,假设你被锁定使用对象的地址作为唯一ID,老实说,你可以做任何你喜欢的。