C ++ while循环和ifstream中的奇怪行为

时间:2014-02-18 01:24:33

标签: c++ while-loop fstream ifstream

所以我遇到一个问题,当我从循环中的文件中读取输入时,我的函数将无法正常工作:

ifstream in(inputFileName.c_str());  //input file is a string
    string word;
    while (in >> word){
        cout << word << endl;  //this behaves as it should n prints all words in file
        test.insert(word, 0);       //this function won't insert the words !
    }

但是,如果我这样做

in >> word;
test.insert(word, 0);
in >> word;
test.insert(word, 0);
in >> word;
test.insert(word, 0);

.... 这一切都很好!!这对我来说真的很奇怪,任何想法可能会导致什么?

1 个答案:

答案 0 :(得分:0)

听起来好像问题可能在你的哈希表类中,其中test是一个实例。

缺乏一个非常好的理由不这样做,我至少考虑使用std::unordered_set代替:

std::ifstream in(inputFilename); // `.c_str()` no longer required in C++11

// read the words into the set
std::unordered_set test {std::istream_iterator<std::string>(in),
                         std::istream_iterator<std::string>()};

// display the unique words:
std::cout << "Unique words:\n";
std::copy(test.begin(), test.end(), 
          std::ostream_iterator<std::string>(std::cout, "\n"));