2015-11-24 2 views
1

У меня возникли трудности с использованием istream_iterator для этой цели. У меня есть файл, который я хочу читать по строкам в наборе. Я должен использовать итератор, и мне было интересно, что-то не так с моим кодом или моим подходом.istream_iterator считывает значения из файла в набор

Помощь очень ценится. Вот упрощенная версия кода я пишу:

main.cpp

#include <iostream> 
#include <fstream> 
#include <string> 
#include <set> 

using namespace std; 

int main() { 

    ifstream file("fruits.txt"); 

    set<string> M; 

    copy(istream_iterator<string>(file), 
     istream_iterator<string>(), 
     [](string & s){ M.insert(s); }); 

    for(auto val : M) { 
     cout << val << ", "; 
    } 

    return 0; 
} 

fruits.txt

banana 
apple 
pear 
strawberry 
blueberry 
peach 
pear 
apple 

Ошибки:

main.cpp:16:26: Variable 'M' cannot be implicitly 
captured in a lambda with no capture-default specified 


/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr 
/include/c++/v1/algorithm:1750:49: Cannot increment value of type '(lambda at 
/Users/cnapoli22/Downloads/TEST SHIT/TEST SHIT/main.cpp:16:10)' 
+1

Вы должны указать ошибку, которую вы получаете, когда задаете вопрос. – Simple

ответ

2

Последний аргумент к copy должен быть итератором, а не лямбда:

#include <algorithm> 
#include <fstream> 
#include <iostream> 
#include <iterator> 
#include <set> 
#include <string> 

using namespace std; 

int main() 
{ 
    ifstream file("fruits.txt"); 

    set<string> M; 

    copy(istream_iterator<string>(file), 
     istream_iterator<string>(), 
     inserter(M, M.end())); 

    for (auto const& val : M) 
    { 
     cout << val << ", "; 
    } 
} 
+0

Теперь он компилируется, но M остается пустым? fruit.txt находится в правильном каталоге, но может ли это быть проблемой с моими настройками сборки или чем-то еще? – Cameron

+0

@ Камерон сожалеет. Измените 'std :: cin' на' файл'. См. Править. – Simple

+0

Хорошо. Все еще не работает. Это может быть проблемой с моей IDE (с использованием Xcode). Правильно ли он выводится на вашем компьютере? – Cameron