C ++-数値のテーブルをファイルから2D配列に読み取ります(最後の行のみが格納されます)

orwinmc

次のような入力ファイルから始めます。

2 3
2 3 4
4 3 2

このデータをC ++の2D配列(行/列の数を指定する最初の行)に読み込もうとしています。

私のコードは現在次のようになっています:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
  ifstream fin;
  fin.open ("dataset.in");

  // a matrix
  int a_numrows;
  int a_numcols;
  int a[a_numrows][a_numcols];

  fin >> a_numrows >> a_numcols;
  cout << a_numrows << " " << a_numcols << endl;
  for (int i = 0; i<a_numrows; i++)
  {
    for (int j = 0; j<a_numcols; j++)
    {
      fin >> a[i][j];
    }
  }
  cout << a[0][0] << endl;

  fin.close();
  return 0;
}

ただし、2D配列の各行には、最後の行が格納されているように見えます。したがって、a[0][0]が出力されると、を返します4この振る舞いは、他の言語から来るものがうまくいくはずだと私が思う方法ではありません。

ピコーヴィンセント

これらの行を並べ替える必要があります。

 int a[a_numrows][a_numcols];

 fin >> a_numrows >> a_numcols;

 fin >> a_numrows >> a_numcols;

 int a[a_numrows][a_numcols];

これは不注意の間違いだと思います。


そうは言っても、2D配列を宣言/使用するためのより安全でより良い方法があります。考えられる例を次に示します。

#include <fstream>
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
  std::ifstream fin("dataset.in");

  size_t n_rows, n_cols;
  fin >> n_rows >> n_cols;

  using T = int;
  std::vector<T> array(n_rows * n_cols);
  array.assign(std::istream_iterator<T>(fin), std::istream_iterator<T>());

  fin.close();

  //-----

  for (size_t i = 0; i < n_rows; i++)
  {
    for (size_t j = 0; j < n_cols; j++)
    {
      std::cout << array[i * n_cols + j] << "\t";
    }
    std::cout << endl;
  }

  return 0;
}

出力:

g++ reader.cpp; ./a.out
2   3   4   
4   3   2   

数値計算を行うときは、一般に、すべての数値を連続したメモリチャンクに格納する方がよいことを覚えおいください(で行われるようにstd::vector)。この状況では、コンパイラーがコードをベクトル化する方が簡単です。

コンポーネントにアクセスするには、以下を使用します。

  • [i*n_cols+j]:行メジャー(Cスタイル)->指定された例、

    この順序でループする方が効率的です。 for i { for j ... } }

  • [j*n_rows+i]:column-major(Fortranスタイル)-> BlasLapackと互換性があります

    この順序でループする方が効率的です for j { for i ... } }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

数値のテキストファイルを読み取り、C ++で整数の配列に格納します

分類Dev

テキストファイルからCの配列に数値の配列を読み取ります

分類Dev

C配列のtxtファイルの2行目から数値を読み取ります

分類Dev

テキストファイルを読み取り、データを複数の配列に格納するC ++

分類Dev

入力ファイルから整数を読み取り、配列C ++に一意の整数のみを格納します

分類Dev

C ++基本的なテキストファイルからテキストを読み取り、2つの異なる配列に格納する方法

分類Dev

.csvファイルからデータを読み取ってcの2D配列に追加する

分類Dev

C++ 指定された範囲のファイルから配列を読み取ります

分類Dev

CのSscanf-.txtから数値を読み取ります。ファイル

分類Dev

ファイルをcharごとに読み取り、データを双方向配列Cに格納します。

分類Dev

C科学的記数法のファイルから2D配列への入力の読み取り

分類Dev

C ++ファイルを読み取り、文字列に格納します

分類Dev

Cテキストファイルから配列に数値を読み取り、他の関数に数値を使用する

分類Dev

Cのファイルからさまざまな値を読み取り、条件に基づいて印刷する

分類Dev

C ++のtxtファイルから数字の行を読み取ります

分類Dev

cのバイナリファイルから配列を読み取ると、誤った値が返されます

分類Dev

C-.txtファイルから読み取り、配列内に文字を格納する

分類Dev

2つの列(数値)を含むファイルを読み取り、配列で出力するCコード

分類Dev

入力値を読み取りながら配列に格納します、c ++

分類Dev

テキストファイルを読み取り、C / C ++の1行あたりの最後の整数のみの結果を取得します

分類Dev

C でファイルから読み込んだ後、ポインターの配列内のすべてのポインターは同じ値を格納します。

分類Dev

テキストファイルから列を読み取り、Cで別々の配列に保存する方法は?

分類Dev

ファイルから11番目の数の列を読み取り、平均しますか?(c ++)

分類Dev

txtファイルから文字列を読み取り、C ++の最初の行で停止します

分類Dev

Cでテキストファイルを読み取り、行を複数の変数に分割します

分類Dev

C ++を使用して、テキストファイルからのみ同じ行で特定の検索文字列の後に文字列/文字/データを読み取ります

分類Dev

Cの.txtファイルからx値とy値を読み取る必要があります

分類Dev

Cのcharバッファー(ファイル読み取りから)の値の数を取得する

分類Dev

点群ライブラリを使用して、ローカル ファイルの代わりに C++ の URL からファイルを読み取ります。

Related 関連記事

  1. 1

    数値のテキストファイルを読み取り、C ++で整数の配列に格納します

  2. 2

    テキストファイルからCの配列に数値の配列を読み取ります

  3. 3

    C配列のtxtファイルの2行目から数値を読み取ります

  4. 4

    テキストファイルを読み取り、データを複数の配列に格納するC ++

  5. 5

    入力ファイルから整数を読み取り、配列C ++に一意の整数のみを格納します

  6. 6

    C ++基本的なテキストファイルからテキストを読み取り、2つの異なる配列に格納する方法

  7. 7

    .csvファイルからデータを読み取ってcの2D配列に追加する

  8. 8

    C++ 指定された範囲のファイルから配列を読み取ります

  9. 9

    CのSscanf-.txtから数値を読み取ります。ファイル

  10. 10

    ファイルをcharごとに読み取り、データを双方向配列Cに格納します。

  11. 11

    C科学的記数法のファイルから2D配列への入力の読み取り

  12. 12

    C ++ファイルを読み取り、文字列に格納します

  13. 13

    Cテキストファイルから配列に数値を読み取り、他の関数に数値を使用する

  14. 14

    Cのファイルからさまざまな値を読み取り、条件に基づいて印刷する

  15. 15

    C ++のtxtファイルから数字の行を読み取ります

  16. 16

    cのバイナリファイルから配列を読み取ると、誤った値が返されます

  17. 17

    C-.txtファイルから読み取り、配列内に文字を格納する

  18. 18

    2つの列(数値)を含むファイルを読み取り、配列で出力するCコード

  19. 19

    入力値を読み取りながら配列に格納します、c ++

  20. 20

    テキストファイルを読み取り、C / C ++の1行あたりの最後の整数のみの結果を取得します

  21. 21

    C でファイルから読み込んだ後、ポインターの配列内のすべてのポインターは同じ値を格納します。

  22. 22

    テキストファイルから列を読み取り、Cで別々の配列に保存する方法は?

  23. 23

    ファイルから11番目の数の列を読み取り、平均しますか?(c ++)

  24. 24

    txtファイルから文字列を読み取り、C ++の最初の行で停止します

  25. 25

    Cでテキストファイルを読み取り、行を複数の変数に分割します

  26. 26

    C ++を使用して、テキストファイルからのみ同じ行で特定の検索文字列の後に文字列/文字/データを読み取ります

  27. 27

    Cの.txtファイルからx値とy値を読み取る必要があります

  28. 28

    Cのcharバッファー(ファイル読み取りから)の値の数を取得する

  29. 29

    点群ライブラリを使用して、ローカル ファイルの代わりに C++ の URL からファイルを読み取ります。

ホットタグ

アーカイブ