【发布时间】: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”),将使用其各自的值调用相应的函数。您能否建议我/纠正我的方法并指导我使用此代码。珍惜你的时间。谢谢
【问题讨论】:
-
首先,我不会将其解析为字符串,我会直接解析为
char和int(只要您信任输入的格式)。其次,在小范围(只有 3 个选项)的情况下,一组 if 语句最终将比函数指针映射更快。 -
你为什么用
((tokens)._Myfirst)[0]这么奇怪的表达方式?如果这是 std::vector 则只需tokens[0] -
你能指导我更多关于编码或参考链接的信息吗?
-
@PiotrNycz 当我调试代码时,我在即时窗口中检查它,我无法通过 token[0] 获取值,我在快速窗口中看到了它,所以我把它放了它有效..
标签: c++ c++11 visual-c++