istream_iterator将文件中的值读取到集合中

istream_iterator read values from file into set

本文关键字:读取 集合 istream iterator 文件      更新时间:2023-10-16

我很难将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)'

copy的最后一个参数需要是迭代器,而不是lambda:

#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 << ", ";
    }
}