#include <iostream>
#include <vector>
using namespace std;
void printMatrix(vector<vector<int> >& m) {
for (int i = 0; i < m.size(); ++i) {
cout << "{" << m[i][0];
for (int j = 1; j < m[i].size(); ++j) {
cout << "," << m[i][j];
}
cout << "}\n";
}
cout << "************************\n";
}
vector<vector<int> > getClimbs(int n) {
vector<vector<int> > first = {{1}};
if (n==1) return first;
vector<vector<int> > second = {{1,1}, {2}};
if (n==2) return second;
vector<vector<int> >& one = first;
vector<vector<int> >& two = second;
vector<vector<int> > res;
for (int i = 3; i <= n; ++i) {
res.clear();
for (int j = 0; j < one.size(); ++j) {
one[j].push_back(2);
res.push_back(one[j]);
}
for (int j = 0; j < two.size(); ++j) {
//cout << "two[0] " << two[j][0] << "\n";
two[j].push_back(1);
//cout << "two[1] " << two[j][1] << "\n";
//cout << "size : " << two[j].size() << "\n";
res.push_back(two[j]);
//cout << "size : " << res.back().size() << "\n";
//printMatrix(res);
two[j].pop_back();
}
one = two;
two = res;
}
return res;
}
int main() {
vector<vector<int> > res = getClimbs(2);
printMatrix(res);
res = getClimbs(3);
printMatrix(res);
res = getClimbs(4);
printMatrix(res);
res = getClimbs(5);
printMatrix(res);
}
Приведенный выше код работает нормально. Но, если вы заметили, я использую два рефери в getClimbs(), один и два. Я сомневаюсь, что я делаю два = res в конце итерации, а затем res.clear() в начале следующей итерации. Теперь, поскольку два являются ссылкой на res, он должен указывать на пустой контейнер. Но этого не происходит. Я могу получить доступ ко всем элементам, которые были в res даже после сброса res. Кто-нибудь знает, почему?Вектор прозрачный эффект на ссылку в петле
Обратите внимание, что это не происходит, если не было цикла, и я просто сделал два = res, за которым следует res.clear(), а затем два указывают на пустой контейнер.
Вы идете из фона Java? В C++ 'two = res' не означает то же, что и в Java. – Arkadiy