Я понимаю, что есть проблемы, когда вы пытаетесь изменить размер двухмерных векторных объектов, но здесь я сталкиваюсь с довольно странной проблемой. Фрагмент кода прилагается ниже:
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 (My Note - Вторая итерация начинается)
sig2 0 (количество строк в My Note- sig2 = 0)
сА 4
Как видите, sig2 принимает значение cA в первой итерации и имеет размер 8 X 8 непосредственно перед достижением конца цикла. Для следующей итерации (iter значение 1) 2d вектор становится нулевым вектором. Чтобы быть справедливым, я очищаю вектор в первой итерации, а затем переопределяю его как меньший размер, но я все еще нахожу поведение немного странным. Это можно обойти? Функция ANALYSIS_FB принимает значение sig2 и возвращает cA, cH и т. Д. Значение sig2 устанавливается в cA (которое имеет размеры, равные половине исходного sig2 в обоих направлениях) и т. Д.
Edit: Спасибо, ребята, что указали на то, что sig2 была как глобальной, так и локальной переменной. Я ударил стену, и это помогло мне решить проблему. В итоге я удалил все «чистые» функции и избавился от любых дополнительных локальных переменных. Я использую sig2 только в качестве глобальной переменной, и программа работает.