C ++ 2d向量在“for”循环内发出

时间:2011-03-28 09:14:46

标签: c++ vector 2d

我知道当你尝试改变2d矢量对象的大小时会出现问题,但我在这里面临一个相当奇怪的问题。代码片段如下:

for (int iter = 0; iter < J; iter++) {
                cout << "iter " << iter << endl;
                rows_n = rows_n / 2;
                cols_n = cols_n / 2;
                cout << "sig2 " << sig2.size() << endl;

                vector<vector<double> >  cA(rows_n, vector<double>(cols_n));
                vector<vector<double> >  cH(rows_n, vector<double>(cols_n));
                vector<vector<double> >  cV(rows_n, vector<double>(cols_n));
                vector<vector<double> >  cD(rows_n, vector<double>(cols_n));
                cout << "cA " << cA.size() << endl;

                ANALYSIS_FB(nm,sig2,cA,cH,cV,cD);

                sig2.clear();
                vector<vector<double> >  sig2(rows_n, vector<double>(cols_n,0.0));

                sig2 = cA;

                for(int i =0; i < rows_n; i++){
                    for (int j =0; j < cols_n; j++){
                        dwt_output[i][j]=cA[i][j];
                    }
                }
                for(int i =0; i < rows_n; i++){
                    for (int j = cols_n; j < cols_n * 2; j++){
                        dwt_output[i][j]=cH[i][j - cols_n];
                    }
                }

                for(int i = rows_n; i < rows_n * 2; i++){
                    for (int j =0; j < cols_n; j++){
                        dwt_output[i][j]=cV[i - rows_n][j];
                    }
                }

                for(int i = rows_n; i < rows_n * 2; i++){
                    for (int j = cols_n; j < cols_n * 2; j++){
                        dwt_output[i][j]=cD[i- rows_n][j - cols_n];
                    }
                }
                for(int i = 0; i < rows_n; i++){
                    for (int j = 0; j < cols_n ; j++){
                        cout << sig2[i][j] << " ";
                    }
                    cout << endl;
                }

           cA.clear();
           cH.clear();
           cV.clear();
           cD.clear();

            cout << "sig2e  " << sig2.size() << endl;
            }

正如您所看到的,这是更大代码的一部分,但我的问题是在循环的第一次迭代后2d向量消失了。我也在附加控制台的输出。

  

iter 0

     

sig2 16

     

cA 8

     

4.49991 10.4998 16.4997 22.4996 28.4995 34.4993 40.4992 46.4991   8.99983 20.9996 32.9994 44.9991 56.9989 68.9987 80.9984 92.9982   13.4997 31.4994 49.4991 67.4987 85.4984 103.498 121.498 139.497   17.9997 41.9992 65.9987 89.9983 113.998 137.997 161.997 185.996   16.4997 38.4993 60.4988 82.4984 104.498 126.498 148.497 170.497   14.9997 34.9993 54.9989 74.9986 94.9982 114.998 134.997 154.997   16.4997 38.4993 60.4988 82.4984 104.498 126.498 148.497 170.497   13.4997 31.4994 49.4991 67.4987 85.4984 103.498 121.498 139.497

     

sig2e 8(我的注意事项 - 第一次迭代以sig2的行数= 8结束)

     

iter 1(我的注意 - 第二次迭代开始)

     

sig2 0(我的注意事项 - sig2的行数= 0)

     

cA 4

如您所见,sig2在第一次迭代中获取cA的值,并且在到达循环结束之前具有8 X 8的大小。对于下一次迭代(iter值为1),2d向量变为空向量。公平地说,我在第一次迭代中清除向量,然后将其重新定义为更小的尺寸,但我仍然发现行为有点奇怪。有没有解决的办法?函数ANALYSIS_FB取sig2的值并返回cA,cH等.sig2的值设置为cA(两个方向的尺寸为原始sig2的一半),依此类推。

编辑:谢谢你们指出sig2是一个全局变量和局部变量。我撞墙了,这帮我解决了问题。我最终删除了所有“清除”函数并删除了任何其他局部变量。我只使用sig2作为全局变量,程序正在运行。

1 个答案:

答案 0 :(得分:3)

你有两个名为sig2的变量,一个在循环之外,一个在里面!

来自您的代码:

///You clear a global sig2
sig2.clear();
///You create a local sig2 !
vector<vector<double> >  sig2(rows_n, vector<double>(cols_n,0.0));