实现一个在集合上迭代的模板函数
Implement a template function that iterates over collection
我如何实现这个模板函数,该函数将来通过迭代提供的集合来选择快速车辆
void select(T test, std::list<const Vehicle*>& vehicles)
:atemplate函数,迭代存储在m_vehicles
中的车辆,并将所有车辆添加到第二个参数则CCD_ 3为真。第一个参数(test
(可以是lambda表达式、指向函数的指针或与原型:bool func(const sdds::Vehicle*);
这是将被调用的lambda表达式之一,以便仅选择快速车辆
auto fastVehicles = [&](const sdds::Vehicle* veh_fast){
bool value = false;
if (veh_fast->topSpeed() > 300){
value = true;
}
return value;
};
我的函数不起作用,但是,这是我迄今为止尝试过的类:
class Autoshop {
std::vector<Vehicle*> m_vehicles;
public:
Autoshop();
~Autoshop();
Autoshop& operator +=(Vehicle* theVehicle);
void display(std::ostream& out) const;
template<typename T>
void select(T test, std::list<const Vehicle*>& vehicles){
bool c = true;
if (test == c) {
for (auto it = m_vehicles.begin(); it != m_vehicles.end(); ++it) {
vehicles.push_back(*it);
}
}
}
};
错误:
错误:对'(main(int,char**(::<lambda(常量sdds::车辆*(>((('46|if(test((==c({|~~~^~w6_p2.cpp:80:29:注意:候选者:'main(int,char**(::<lambda(const sdds::Vehicle*(>'80|
auto-fastVehicles=[&](const sdds::Vehicle*veh_fast({|^w6_p2.cpp:80:29:注意:候选者需要1个参数,提供0个
您必须测试车辆,因此您必须将车辆传递给测试功能。
因此,对test
的调用应该在循环内部,而不是在循环外部,并且您将去引用迭代器传递给它
for (auto it = m_vehicles.begin(); it != m_vehicles.end(); ++it)
if (test(*it)) // perform the test on a vehicle
vehicles.push_back(*it);
基于距离的循环可能更容易理解
for (auto vp : m_vehicles)
if (test(vp)) // perform the test on a vehicle
vehicles.push_back(vp);
或者按照以上注释中的建议使用std::copy_if
。
相关文章:
- 实现一个在集合上迭代的模板函数
- 如何在C++中将迭代器作为函数参数传递
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么我的模板化函数需要从一个迭代器转换到另一个迭代器?
- 调用迭代函数的次数
- HPX 是否提供具有粒度控制的基于任务的并行化迭代函数?
- 如何将递归函数(具有两个基本情况)转换为迭代函数
- 将递归函数转换为迭代函数
- 当我计算它并给我 O(n^3) 时,这个迭代函数是如何是 O(n/2) 的
- C 的自定义迭代函数
- 如何记录C 重复迭代函数的总时间
- 使用迭代函数调用初始化std::vector
- 将递归可变参数模板函数转换为迭代函数
- 将迭代函数转换为递归函数
- 将迭代函数转换为递归函数
- c++使用迭代函数进行编译
- 模板类中向量向量的迭代函数构建
- 将迭代函数转换为递归函数
- 这个递归函数是如何自动转换成迭代函数的
- 在编译时迭代函数参数类型