0
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    ifstream fin("test.txt");

    vector<string> coll;

    typedef istreambuf_iterator<char> IStrBufIter;
    copy(IStrBufIter(fin), IStrBufIter(), back_inserter(coll)); // Error! Why?
}

该问题在代码中进行了注释。

我得到的错误是:

oi.cpp:15:62:   required from here
error: invalid user-defined conversion from ‘std::istreambuf_iterator<char, std::char_traits<char> >::char_type {aka char}’ to ‘std::vector<std::basic_string<char> >::const_reference {aka const std::basic_string<char>&}’ [-fpermissive]

随后的错误消息太多,无法粘贴到此处。请参阅 gcc 4.7 上的错误消息http://pastebin.com/anKQqL00

4

2 回答 2

4

考虑一下你copy在做什么。它反复调用coll.push_back(someChar);

coll是 的向量strings。您正试图将 a 推char入其中。您不能string从 a 构造 a char

另外,你应该在istream_iterator这里使用,而不是istreambuf_iterator. 您可以制作scoll的向量char,或者如果您打算将文件中的每个单词放入字符串向量中(我怀疑您可能是),您可以更改istream_iterator<char>istream_iterator<string>.

或者,更好的是,您可以首先使用迭代器构造向量:

 vector<string> coll(istream_iterator<string>(fin), istream_iterator<string>());
于 2013-02-06T02:23:53.037 回答
3

如果要将文件的内容放入向量中,只需循环遍历它。

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    ifstream fin("test.txt");

    vector<string> coll;
    string str;
    while(getline(fin,str))
        coll.push_back(str);
}

可能更容易处理和不言自明。

于 2013-02-06T02:26:06.270 回答