【发布时间】:2016-05-17 07:54:51
【问题描述】:
我是 C++ 的初学者,我已经实现了以下简单的跳转表,但想知道我是否以正确的方式进行操作。无论如何我可以改进以下代码吗?
以下代码使用字典(我来自 C# 背景)来存储函数的指针。
#include <cstdio>
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
void Zero() { printf("Zero\n"); }
void One() { printf("One\n"); }
void Two() { printf("Two\n"); }
void Three() { printf("Three\n"); }
string prompt()
{
printf("Enter number from 0 to 3 or q to quit:\n");
string line;
getline(cin, line);
return line;
}
int main(int argc, const char * argv[]) {
unordered_map<string, void(*)()> map;
map["0"] = Zero;
map["1"] = One;
map["2"] = Two;
map["3"] = Three;
while (true) {
string c = prompt();
if (c == "q") break;
map[c]();
}
return 0;
}
【问题讨论】:
-
效率如何?
-
m[c]不存在时怎么样 - 即用户输入了不在菜单上的内容 -
关于改进工作代码的问题更适合Code Review。
-
基本思路是好的,虽然执行在几个不相关的方面存在缺陷。
标签: c++ arrays dictionary