1

リンク リストの実装を使用して別のリンク リストを変更しようとしています。これが私がやろうとしていることの例です。

list<int>list1;
list<int>list2;

list1.push_back( 1 );   // < --- want to modify this list
list1.push_back( 2 );

list2.push_back( 1 );   // with this list

つまり、list1 を変更するための変数のようなものとして list2 を使用したいと考えています。いくつかの調査を行ったところ、配列のようにリストのノードにアクセスできないようです。ノードを簡単に追加および削除し、他のコンテナーと比較および変更できるコンテナーはありますか? セットは別の方法かもしれないと思っていましたが、セット内の値にもアクセスできないようです。どんな助けや証拠も素晴らしいでしょう。前もって感謝します。

編集:::

数独ソルバーを作成しようとしています。81桁すべて(空白と指定)を「リンクリスト」に入れました。現在、1 つのセルを表す各「リスト」から可能な候補を削除しようとしています。

たとえば、listlist1; リストリスト2;

list1.push_back( 1 );  
list1.push_back( 2 );

list2.push_back( 1 );   

私は今このようにlist2を使いたい

list1.remove( list2(?) );  // < -- this obviously isn't possible due to how nodes are stored.

私の質問が少し明確になることを願っています。これは、単純な数独を解くために私が使用している方法であり、後で力ずくの手法を実装します。

4

3 に答える 3

1

コンテナを別のコンテナで変更するというあなたの考えは、参照について何を意味していたのかわかりません。参照変数として使用します。

list<int> list1;
list<int>& list2 = list1;

list2.push_back(1); //<--- modifies list1

またはポインタを使用します:

list<int> list1;
list<int>* list2 = &list1;

list2->push_back(1); //<--- modifies list1

ここでポインタについて読む

于 2012-10-24T06:31:42.873 に答える
0

list::remove_if()あなたのリストは長すぎないので、ここで使用するのが最善の策だと思います.

補助機能を使用します。

bool IsInList2(int el)
{
  return std::find(list2.begin(), list2.end(), el) != list2.end();
}

そしてあなたのコードでそれを使用してください:

list1.remove_if(&IsInList2);
于 2012-10-24T06:56:13.580 に答える
0

これは 1 つの方法であり、他の方法があることは間違いありません。それはあなたの状況が何であるかによって異なります。たとえば、リストがソートされている場合、これよりも良い方法があります。

list<int> list1 = ...;
list<int> list2 = ...;
for (list<int>::const_iterator i = list2.begin(); i != list2.end(); ++i)
  list1.remove(*i);
于 2012-10-24T06:53:17.423 に答える