/ LCS - C ++、ベクトル用の/ 2d配列テーブル

LCS - C ++、ベクトルの2次元配列表

私は最長共通を解決するコードを書いていますサブシーケンスの問題.M X w次元の2次元テーブルを定義する必要があります。私はそれをグローバル変数として定義しましたが、容量を超えたエラーが発生しました。

#define FOR(i,n) for( i = 0; i < n ; ++ i)
int LCS(const char M[],int m, const char W[], int w)
{
// m length of M w length of W
int ans,min,i,j;
// lcs table needs to be defined with required dimensions
min = ( m >= w ) ? w : m;

FOR(i,m)
FOR(j,w)
{
if (i == 0 || j == 0)
lcs[i][j] = 0; // repetitive
else if (M[i] == W[j] )
lcs[i][j] = lcs[i-1][j-1] + 1;
else
lcs[i][j] = max(lcs[i-1][j],lcs[i][j-1]);
}

return (min == lcs[m-1][w-1]);
}

私はベクトルのベクトルを使うことを検討していますが、それと同時にサイズをm x wと定義することは可能ですか?

vector < vector <int> > lcs

私はベクトルをあらかじめ定義し、コードのように添え字演算子を使ってベクトルにアクセスしたいので十分ではありません。

回答:

回答№1は1

はい、すべての内側ベクトルが同じサイズでなければなりません。

std::vector< std::vector<int> > v(9000, std::vector<int>(9000, 23));

最初の引数は count (最初にいくつのオブジェクトを vector)、第2引数はそれらのそれぞれを初期化するために使用される値です。上記の場合、それぞれ9000回の数字23で満たされた9000個のベクトルになります。

完全なリスト vector コンストラクタ ここにある.


回答№2の場合は3

つかいます

vector<vector<int>> lcs(m, vector<int>(w));

サイズのベクトルベクトルを作成する m x w.

これは2つのパラメータstd :: vectorコンストラクタのために働きます:

vector(size_type n, const value_type& val = value_type());

それはサイズを取る n その第1パラメータとして値 val その2番目のパラメータとして、 m のコピー vector<int>(w)、 あれは m のコピー vector<int> サイズの w (デフォルト値 int()、これは0です)。

参考文献


答え№3の2
std::vector< std::vector<int> > lcs( m, std::vector<int>( w ) );