#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
上的错误消息答案 0 :(得分:4)
考虑copy
正在做什么。它反复拨打coll.push_back(someChar);
coll
是strings
的向量。您正试图将char
推入其中。您无法从string
构建char
。
此外,您应该在istream_iterator
使用istreambuf_iterator
,而不是coll
。您可以将char
设为istream_iterator<char>
的向量,或者如果您的目标是将文件中的每个单词都放入字符串向量中(我怀疑您可能是这样),您可以更改{{1}转到istream_iterator<string>
。
或者,更好的是,您可以使用迭代器首先构造向量:
vector<string> coll(istream_iterator<string>(fin), istream_iterator<string>());
答案 1 :(得分: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);
}
可能更容易处理和不言自明。