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。あなたはそれに押し込もうとしcharています。stringaから a を構築することはできませんchar

istream_iteratorまた、ではなく hereを使用する必要がありますistreambuf_iteratorcolls のベクトルを作成するか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 に答える