2

事前にサイズがわからないC++(gcc)でテーブルを格納したいのですが、どのような構造を使用するかがリアルタイムで決定されますか?

4

5 に答える 5

3

テーブルのレコードに使用する構造のベクトルを作成します。

vector<MyRecord> v;

以下を使用してレコード(タイプMyRecordのオブジェクト)を追加します。

v.push_back(record);
于 2012-12-23T16:51:49.447 に答える
1

ほとんどの目的のためのstd::vector、またはstd::dequeあなたが探しているものであるアレイを意味する場合。

 std::vector<ClassOrTypeYouNeedToStore> v;
 v.push_back(1):
 v.push_back(2):
 v.push_back(3):
 std::cout << "Length of vector " << v.size() << std::endl;
 // Before C++11
 for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++) {
     std::cout << "Next element is " << *it << std::endl;
 }
 // C++11+
 for (auto it = v.begin(); it != v.end(); it++) {
     std::cout << "Next element is " << *it << std::endl;
 }
于 2012-12-23T16:52:00.267 に答える
1

それは、何を保存する必要があるかによって異なります。列が固定されていて異なる型であり、行を動的に挿入および削除できるようにする場合は、 が必要になる場合がありますstd::vector<std::tuple<T,U,V>>(または の代わりに、tuple何らかの構造体を使用できます)。

列が固定されているがすべて同じタイプの場合は、試してstd::vector<std::array<T,N>>みてください。

行と列の数が固定されていて、同じタイプの場合は、 を試してくださいstd::array<std::array<T,N>,M>

行と列の数が固定されていても、各列のタイプが異なる場合は、std::array<std::tuple<T,U,V>,N>うまくいくはずです。

列の数も変化させたい場合は、内部の型をstd::vector何らかの種類にする必要があります。

于 2012-12-23T16:54:59.510 に答える
0

通常、その場合は を使用しますstd::vector

size_t rsz = 4;
size_t csz = 4;

std::vector<double> table(rsz*csz, 0.0);

for (size_t i = 0; i < rsz; i++) {
  for (size_t j = 0; j < csz; j++) {
    table[i*csz+j] = i * 10 + j;
  }
}

私は1Dベクトルを好む傾向があり、自分でオフセット演算を行うだけです。ヘルパー関数が過度に専門化されるのを防ぎます。

于 2012-12-23T16:55:22.230 に答える
0

提案されているように、「サイズ」が使用できる「行数」を意味する場合は、、、またはを使用できますvector<vector<CellType>>(私のお気に入りのソリューション)。配列には一定の長さ (パフォーマンス、メモリ フットプリント、メモリ アラインメント) という利点があり、このソリューションでは、リレーショナル DB とほぼ同じ柔軟性が得られます。vector<RowType>vector<array<RowSize, CellType>>

于 2012-12-23T16:59:03.030 に答える