我从C++编程语言中复制了这个简单的程序,但是我无法使它按照预期工作。我是否遗漏了什么? 基本上,程序将在我按回车键后输出"输入结束",然后从cin重复输入。它永远无法进入下一个语句。我尝试使用向量(下面注释掉的两个语句),结果相同。在Vc6和vs2008上都尝试过。
#include <iostream>
#include <map>
#include <algorithm>
#include <string>
#include <iterator>
#include <vector>
using namespace std;
map<string, int> histogram;
void record(const string &s)
{
histogram[s]++; //this is pretty strange, however it does work!
cout<<"recorded:"<<s<<" occurance="<<histogram[s]<<"\n";
}
void print(const pair<const string,int> &r)
{
cout<<r.first<<' '<<r.second<<'\n';
}
int main()
{
istream_iterator<string> ii(cin);
istream_iterator<string> eos;
cout<<"input end\n";
for_each(ii,eos,record); //this statement cannot get out why? It repeats the keyboard input
//vector<string> b(ii,eos);
//for_each(b.begin(),b.end(),record);
for_each(histogram.begin(),histogram.end(),print); //program never comes here why?
}
运行结果:
a b c
输入结束
记录:a 出现次数=1
记录:b 出现次数=1
记录:c 出现次数=1
1 2 3
记录:1 出现次数=1
记录:2 出现次数=1
记录:3 出现次数=1