C++ でいくつかのコードを単純化する方法について質問を受けました。
そのため、CS コースでこのラボが与えられ、入力ファイルに基づいて大きな文を生成し、読み取った行を文字列のリストのリストのマップに格納する必要があります (うわー!)。再帰関数を使用して検索する必要があります。
したがって、マップ キーは文字列です。最初のリストは行のコレクションで、2 番目のリストはファイルから解析された文字列のコレクションです。
map<string, list<list<string> > >
文字列のリストを 1 つの文字列に再構築する必要があります。いくつかのイテレータを設定しましたが、イテレータの宣言に到達すると「セグメンテーション違反 11」が発生します。
「文法」は、すでに入力が与えられ、参照によって渡されるマップです。
「不完全」は、関数に渡されるキーと等しい文字列です。
コードスニペット:
string found = "";
map<string, list<list<string> > >::iterator section = grammar.find(incomplete);
list<list<string> > listItem = section->second;
list<list<string> >::iterator lIt = listItem.begin();
srand(time(NULL));
++lIt;
advance (lIt, rand() % listItem.size());
list<string> stringItem = *lIt;
while (stringItem.empty() == false){
found = found + " " + stringItem.front();
stringItem.pop_front();
}
rand() の必要性を説明するには: 最初のリストには複数のリストがあり、文を生成するためにランダムに 1 つを選択します。私はそれを正しく使用しましたか?
このあたりで止まります。そのリストにたどり着くもっと簡単な方法があると確信していますが、それを理解できないようです.「セグメンテーションフォールト11の場合、これらすべてを宣言するために多くのメモリを消費していると思います. 」が投げられています。助言がありますか?