1

次のPythonコードをC++で再現したいのですが、問題が発生しました。関数read_fileは、テキストファイルを読み取り、各行の最初の単語をテストして、それが整数であるかどうかを確認します。最初の単語が整数(4桁以上)の場合、その行のすべての単語が浮動小数点数としてリストzに追加されます。それ以外の場合、行は単に文字列としてリストに追加されます。リストのリスト(z)は2D numpy配列に変換され、残りとともに返されます。

def read_file(f):
    srchp = re.compile(r'^\d{4,}\s') # beg. of line, digit min 4, white space
    f = open(f)
    rest = [] 
    z = [x.strip() for x in f.readlines()] # read file, strip whitespace at beg./end of line,
    #store in z as list of strings. each line is at its own offset
    for i in range(len(z)-1,-1,-1):
        if not srchp.search(z[i]): #if regex does not match
            rest.append(z.pop(i)) #append to list rest
        else:
            z[i] = map(float,z[i].split())
    f.close()
    return numpy.array(z),rest

C ++のコンテナー(ベクトルのベクトル?配列?)にはどのデータ型を使用する必要がありますか?一日の終わりに、配列を使用して統計分析を行いたいと思います。このコードをC++に変換する際に助けていただければ幸いです。

以下は、読み取る必要のあるファイルからの抜粋です。

TEMP_INF                          700.000000                    SCALAR

NAME                              VALUE                        TYPE  DIMENSIONS
TEMP_REF                          25.0000000                    SCALAR

  ***** POST1 ELEMENT TABLE LISTING *****                                      

 STAT        MIXED           MIXED           MIXED           MIXED   
 ELEM        X               Y               Z               TEMP    
23261      0.56292E-03    -0.96401E-02     0.24093          755.91    
23262     -0.16635E-03    -0.97998E-02     0.24080          756.25    
23263     -0.17039E-03    -0.10374E-01     0.24025          757.65    
23264      0.12895E-02    -0.74483E-02     0.24242          751.64    
23265      0.67515E-03    -0.80538E-02     0.24209          752.62    
23266      0.10350E-02    -0.86614E-02     0.24164          753.92    
23267      0.56032E-03    -0.88420E-02     0.24105          756.49    
23268      0.13782E-02    -0.10792E-01     0.23978          758.74 
4

1 に答える 1

1

各行は int と float を保持しているように見えるため、structその情報を使用して を宣言することをお勧めします。

struct row {
  int elem;
  float x, y, z, temp;
};

vector<row>これで、情報を保持するを作成できます。

 vector<row> rows;

行ごとに、次のように要素を挿入できます。

row r;
cin >> r.elem >> r.x >> r.y >> r.z >> r.temp;
rows.push_back(r);
于 2012-07-02T23:58:17.283 に答える