【问题标题】:Map enum key and value using function pointer in C++在 C++ 中使用函数指针映射枚举键和值
【发布时间】:2016-03-09 04:14:14
【问题描述】:

我对 C++ 编程非常陌生。我正在攻读硕士学位,正在研究教授给出的一个问题。问题是关于在二叉搜索树上执行基本操作。我有一个文件格式如下:

I 1015291402
I 729831403
I 1005116371
F 757970570
D 1005116371
F 729831403
I 1218751282
D 1015291402
I 582339464
I 92421221

在搜索树上可以进行三种基本的插入、删除和查找操作。所以我需要逐行读取这个文件执行操作。下面是我目前写的代码。

string line;
ifstream infilesmall("inputfile_small.txt");
//ifstream infilelarge("inputfile_small.txt");

while (getline(infilesmall, line))
{
    istringstream iss(line);
    vector<string> tokens;
    copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter(tokens));
    string  str = ((tokens)._Myfirst)[0];
    cout<< ((tokens)._Myfirst)[1];

    //char operation =  new char(((tokens)._Myfirst)[0]);
    /*typedef void (*funcPointer)(int);
    void String1Action(int arg);
    void String2Action(int arg);
    map<string, funcPointer> stringFunctionMap;
    stringFunctionMap.add("string1", &String1Action);*/

    insert(t,10);
    find(t,0);
    //Delete(t,10);
}

那么问题是什么是通过拆分行来调用插入、删除和查找的理想方法?我需要注意表现。我发现的一种方法是使用键和值对创建枚举并具有函数指针。因此,根据键值(“I”、“D”、“F”),将使用其各自的值调用相应的函数。您能否建议我/纠正我的方法并指导我使用此代码。珍惜你的时间。谢谢

【问题讨论】:

  • 首先,我不会将其解析为字符串,我会直接解析为charint(只要您信任输入的格式)。其次,在小范围(只有 3 个选项)的情况下,一组 if 语句最终将比函数指针映射更快。
  • 你为什么用((tokens)._Myfirst)[0]这么奇怪的表达方式?如果这是 std::vector 则只需 tokens[0]
  • 你能指导我更多关于编码或参考链接的信息吗?
  • @PiotrNycz 当我调试代码时,我在即时窗口中检查它,我无法通过 token[0] 获取值,我在快速窗口中看到了它,所以我把它放了它有效..

标签: c++ c++11 visual-c++


【解决方案1】:

您的代码过于复杂。您可以从文件中读取运算符和数字,一次一对,并根据运算符的值适当地使用数字。

char op;
int number;
while ( infilesmall >> op >> number )
{
   switch (op)
   {
      case 'I':
         insertData(number);
         break;

      case 'D':
         deleteData(number);
         break;

      case 'F':
         findData(number);
         break;

      default:
         std::err << "Unknown operator, " << op << std::endl;
   }
}

【讨论】:

  • 当我们必须注意性能的时候,开关好用吗?
  • @R Sahu 好的,谢谢。你能推荐一些学习 C++ 的资源吗?
  • @DharaPPatel,当然。看看The Definitive C++ Book Guide and List
  • 非常感谢@R Sahu
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多