"for"循环内的 C++ 二维 vector 问题

标签 c++ vector 2d

我知道当您尝试更改 2d vector 对象的大小时会出现问题,但我在这里遇到了一个相当奇怪的问题。代码片段附在下面:

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 vector 在循环的第一次迭代后消失了。我也附上了控制台的输出。

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 (My Note - First Iteration Ends with sig2's number of rows = 8)

iter 1 ( My Note - Second Iteration Begins)

sig2 0 (My Note- sig2 's number of rows = 0)

cA 4

如您所见,sig2 在第一次迭代中采用 cA 的值,并且在到达循环结束之前具有 8 X 8 的大小。对于下一次迭代(iter 值为 1),二维 vector 变为空 vector 。公平地说,我在第一次迭代中清除了 vector ,然后将其重新定义为更小的尺寸,但我仍然觉得这种行为有点奇怪。有没有解决的办法?函数 ANALYSIS_FB 获取 sig2 的值并返回 cA、cH 等。sig2 的值设置为 cA(其在两个方向上的尺寸都是原始 sig2 的一半)等等。

编辑:感谢你们指出 sig2 是全局变量和局部变量。我碰壁了,这帮助我解决了问题。我最终删除了所有“清除”函数并删除了任何其他局部变量。我仅将 sig2 用作全局变量,并且该程序正在运行。

最佳答案

您有 2 个名为 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));

关于 "for"循环内的 C++ 二维 vector 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5456863/

相关文章:

iphone - 使用蒙皮控件创建 iPhone 屏幕

c++ - 将元素从 vector 复制到另一个

java - [ ][ ] 和 if 语句在代码中不起作用

java - 2D 相机翻译

c++ - 将元素从 std::vector 移动到另一个

c++ - 避免模​​板扩散

c++ - C++:实现Vector和Matrix类的最佳结构

java - 将 3D 点投影到 2D 屏幕坐标

c++ - QT Creator 的 LNK4099 链接器警告

c++ - 清理 QList 和 QGraphicsScene 以避免内存泄漏