向量的向量初始化工作不会,但矩阵数组可以,为什么会这样?

Vector of vectors initialization work won't but a matrix array does, why so?

本文关键字:向量 为什么 数组 初始化 工作      更新时间:2023-10-16

所以我练习解决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对象访问超出边界的位置将。