gpt4 book ai didi

c++ - 我可以使用 lambda 来简化 for 循环吗

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:29 24 4
gpt4 key购买 nike

我想知道是否有简化for循环的方法,比如在不改变下面代码性质的情况下使用lambda表达式。如果可能的话,我还想知道是否有其他方法(更好)来执行一系列功能,这些功能可以像下面的代码那样做类似的事情。谢谢

#include <iostream>
#include <functional>
#include <vector>
using namespace std;
void turn_left(){ // left turn function
cout<<"Turn left"<<endl;
}
void turn_right(){ // right turn function
cout<<"Turn right"<<endl;
}
void onward(){ // moving forward function
cout<<"Onward"<<endl;
}
int main() {
vector<char>commands{'L', 'R', 'M'}; // commmands (keys)for robot to turn or move;
vector<pair<function<void()>, char>> actions; // a vector of pairs, which pairs up the function pointers with the chars;
actions.push_back(make_pair(turn_left, 'L')); //populate the vector actions
actions.push_back(make_pair(turn_right, 'R'));
actions.push_back(make_pair(onward, 'M'));
for (int i =0; i<commands.size();++i){
if(commands.at(i)==actions.at(i).second){
actions.at(i).first();
}
}
}

最佳答案

您可以使用 std::map/std::unordered_map 将函数映射到命令,而不是使用 lambda 来简化代码,然后您可以简单地使用基于范围的 for 循环来遍历您拥有的所有命令。

int main() {
vector<char>commands{'L', 'R', 'M'}; // commmands (keys)for robot to turn or move;
std::map<char, function<void()>> actions = {{'L', turn_left},{'R', turn_right},{'M', onward}};
for (auto command : commands)
actions[command]();
}

关于c++ - 我可以使用 lambda 来简化 for 循环吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51847252/

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