0

ifstream finから読み取り、 istream_iterators を使用してベクトルvec1に入れようとしています。私はあちこちでこれらのものを見てきました:

vector<int> vec1((istream_iterator<int>(fin)),istream_iterator<int>);

後で使用するために istream_iterators を保持したいので、「これでうまくいくはずだ」と考えました。

istream_iterator<int> iit(fin);
istream_iterator<int> eos;
vector<int> vec1(iit,eos);

... 機能しません =( 私のベクトルは完全に空です (私が読み取ったファイルは、数字だけの txt ファイルです)。

編集: txt は次のようになります。

06351784798452318596415234561
6641321856006
4

2 に答える 2

1

コメントによると、数字の最初のシーケンスは an の最大値より大きいintため、入力操作は失敗し、vector空のままになります。

テンプレートintを使用して、などの最大値を取得できます。std::numeric_limits

std::cout << std::numeric_limits<int>::max() << "\n";
于 2012-10-04T14:44:27.113 に答える
0

中間ステップとして、シーケンスをすぐに反復して、何かがあるかどうか (おそらくない) を確認することをお勧めします。

while (iit != eos) {
    std::cout << *iit++ << '\n';
}

これで何も出力されない場合は、最初にストリームが良好な状態であることを確認してください。

if (!fin) {
    std::cout << "file not opened!\n";
}

ストリームに数字のみが含まれ、スペースが含まれていない場合、おそらくオーバーフローintし、結果として読み取りが失敗します。

于 2012-10-04T14:40:48.423 に答える