LCS的二维阵列表
问题描述:
我已经编写了解决最长公共子序列问题的代码。只需要定义m个X维的二维表。我已经将它定义为一个全局变量,但它抛出了容量超出的错误。LCS的二维阵列表
#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
不足以作为我想预先定义矢量并使用下标操作符在代码中访问它。
答
是的,你可以只要所有内部载体应该是相同的大小。
std::vector< std::vector<int> > v(9000, std::vector<int>(9000, 23));
第一个参数是所述count
(多少对象最初应当在vector
),第二个参数是用于初始化每个那些的值。在上述情况下,您最终将得到9000个矢量,每个矢量用数字23的9000倍填充。
构造函数is here的完整列表。
答
std::vector< std::vector<int> > lcs(m, std::vector<int>(w));
答
使用
vector<vector<int>> lcs(m, vector<int>(w));
创建一个大小m x w
的 “载体的载体”。
此操作,因为这两个参数的std ::向量构造的:
vector(size_type n, const value_type& val = value_type());
这需要大小n
作为第一个参数,并作为其第二个参数的值val
,所以有vector<int>(w)
m
份,即大小为w
的vector<int>
的m
副本(默认值为int()
,即0)。
参考:
OK.WIthout object name form is allowed – devsaw 2013-05-11 21:57:22
@DamnDev对不起,我不明白。什么样的形式是允许的,哪些对象名称不存在? – pmr 2013-05-11 22:05:36