1. ホーム
  2. c++

[解決済み] C++でファイルをベクターに読み込むには?

2022-02-17 13:24:57

質問

からの読み込みが必要です。 .data または .txt ファイルには、新しい float の番号を各行のベクトルに変換する。

いろいろと検索して、いろいろな方法を適用してみましたが、毎回同じような結果になってしまいます。 Main.size()0 というエラーが発生し "Vector Subscript out of Range" ということは、明らかにベクターがファイルに何も読み込んでいないだけです。

注:ファイルは、フォルダ内にも、VSプロジェクトにも含まれています。

とにかく、これが私のコードです。

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

using namespace std;

int main() {

    vector<double> Main;
    int count;
    string lineData;
    double tmp;

    ifstream myfile ("test.data", ios::in);

    double number;  

    myfile >> count;
    for(int i = 0; i < count; i++) {
        myfile >> tmp;
        Main.push_back(tmp);
        cout << count;
    }

    cout << "Numbers:\n";
    cout << Main.size();
    for (int i=0; i=((Main.size())-1); i++) {
        cout << Main[i] << '\n';
    }

    cin.get(); 
    return 0;
}

得られる結果はいつもシンプルです。

Numbers:
0

解決方法は?

ループがおかしい。

for (int i=0; i=((Main.size())-1); i++) {

これを試してみてください。

for (int i=0; i < Main.size(); i++) {

また、ベクターに数値を読み込んで標準出力に書き出す、よりイディオムな方法は、以下のようなものです。

#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>
#include <algorithm> // for std::copy

int main()
{
  std::ifstream is("numbers.txt");
  std::istream_iterator<double> start(is), end;
  std::vector<double> numbers(start, end);
  std::cout << "Read " << numbers.size() << " numbers" << std::endl;

  // print the numbers to stdout
  std::cout << "numbers read in:\n";
  std::copy(numbers.begin(), numbers.end(), 
            std::ostream_iterator<double>(std::cout, " "));
  std::cout << std::endl;

}

の状態を確認する必要がありますが ifstream を使用すると、読み取りエラーが発生します。