私はあなたに私の問題を提示します
私は2つのリストを持っており、それらにAとBという名前を付けています。
list<vector<int> > A = {{1},{2},{3}};
list<vector<int> > B = {{4},{5},{6}};
私が欲しいのは、A = {{1,4}、{1,5}、{1,6}、{2,4}、{2,5}、{2,6}、{3,4}にすることです、{3,5}、{3,6}}tmpリストを使用しません。
Ubuntu12.04でgcc4.6.3でC++11を使用しています
コードを最小化するために:
auto A_begin = A.begin();
auto A_end = A.end();
auto B_begin = B.begin();
auto B_end = B.end();
for(auto i = A_begin; i != A_end; ++i) //loop on A
{
for (auto j = B_begin;j != B_end; ++j) //loop on B
{
vector<int> tmp = (*i); // A[i]
copy((*j).begin(),(*j).end(),back_inserter(tmp)); // append B[j] to A[i]
A.emplace_back(tmp); //add it to A
}
}
A.erase(A_begin,A_end); // remove {1},{2},{3}
ですから、アルゴは大丈夫だと思いますが、Aで無限ループを作ります。A.emplace_backを作成するとA_endが変化すると思いますが、保存しているので、ここにwatを追加するのは本当にわかりません。
問題を特定するための私のコード:
auto A_begin = A.begin();
auto A_end = A.end();
auto B_begin = B.begin();
auto B_end = B.end();
int ii = A.size();
for(auto i = A_begin; i != A_end; ++i) //loop on A
{
for (auto j = B_begin;j != B_end; ++j) //loop on B
{
vector<int> tmp = (*i);
A.emplace_back(tmp);
}
cout<<--ii<<endl; // exit when print 0 ?
}
これは負の数を出力します、そして私は再び^Cしなければなりません。
編集:私は解決策を見つけます:
auto A_begin = A.begin();
auto A_end = A.end();
auto B_begin = B.begin();
auto B_end = B.end();
list<vector<int>> tmp_l;
for(auto i = A_begin; i != A_end; ++i) //loop on A
{
for (auto j = B_begin;j != B_end; ++j) //loop on B
{
vector<int> tmp = (*i); // A[i]
copy((*j).begin(),(*j).end(),back_inserter(tmp)); // append B[j] to A[i]
tmp_l.emplace_back(move(tmp)); //add it to A
}
}
swap(tmp_l,A);