向量的向量初始化工作不会,但矩阵数组可以,为什么会这样?
Vector of vectors initialization work won't but a matrix array does, why so?
所以我练习解决DP问题,发现这个问题,我不明白为什么。如果我初始化大小为n的向量的向量,运算就行不通了。同时,如果我把cost声明为int cost[n][n]它确实是。请告诉我为什么。
int sum (vector<int> freq, int i, int j){
int s=0;
for (int x=i; x<=j; x++) {
s+=freq[x];
}
return s;
}
int optimalSearchTree(vector<int> keys, vector<int> freq){
int n = keys.size();
vector<vector<int>> cost( n,vector<int>( n,0 )) ;
for (int i = 0; i < n; i++) {
cost[i][i] = keys[i];
}
for (int L=2; L<=n; L++) {
for (int i = 0; i<= n-L+1; i++) {
int j = i+L-1;
cost[i][j] = INT_MAX;
for (int r=i; r<=j; r++) {
int c = ((r > i)? cost[i][r-1]:0) +
((r < j)? cost[r+1][j]:0) +
sum(freq, i, j);
if (c < cost[i][j]) {
cost[i][j] = c;
}
}
}
}
return cost[0][n-1];
}
int main(){
vector<int> keys = {10,12,16,21};
vector<int> freq = {4,2,6,3};
cout<<optimalSearchTree(keys, freq)<<endl;
// int n = keys.size();
//vector<vector<int>> cost( n,vector<int>( n,0 )) ;
//cout<<cost.size()<<" "<<cost[0].size()<<endl;
}
我相信解决办法和这个问题是一样的:
访问超出边界的数组没有错误,为什么?
在其中,指定对int类型的arr[n][n]的越界访问不会返回任何错误。同时,从vector对象访问超出边界的位置将。
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 为什么一个向量上的多线程操作很慢
- 为什么C++常量模板化向量在使用之前没有初始化?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 为什么向量内部的指针在从函数返回时会发生变化?
- 为什么不允许使用可变长度数组作为向量元素?
- 为什么我在向量初始化时收到此错误?
- 为什么我必须在作案操作中解析向量的大小?
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 为什么即使使用 for 循环遍历我的向量,它也没有输出到控制台?(C++)
- 为什么负数不取模向量大小给出负数?
- 为什么这种向量声明无效?
- 为什么在向量上使用 std::find() 时会出现错误?
- 为什么在此排序算法实现中,向量明显比数组慢?
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 在 C++ 中将元素添加到空向量:为什么 push.back 有效而 [] 无效
- 用不重复的随机数填充向量.为什么不工作