LC 752オープンロック(未完成)

この問題のため、このようなハッシュテーブル内のデータ構造、C ++イテレータ、それゆえ、私たちはすべての疑問に1つずつ分割する必要があるとして、多くの知識を、必要とします。

問題の説明

 

 

回答

1  クラスソリューション{
 2  公共3      int型 openLock(ベクトル< ストリング >&deadends、文字列ターゲット){
 4          unordered_set < ストリング > デッドロック(deadends.begin()、deadends.end())。
5          あれば(deadlock.count(" 0000 "))リターン - 1 6          INT RES = 0 7          unordered_set < 文字列は >訪問{{ " 0000 " }}。
8         キュー< ストリング > Q {{ " 0000 " }}。
9          ながら(!q.empty()){
 10の              ++ RES。
11              のためのint型 K = q.size(); K> 0 ; - K){
 12                  オートT = q.front()。q.pop();
13                  のためには、int型私= 0 ; iはt.sizeを()<; ++ I){
 14                      のためのint型 J = - 1 ; J <= 1 ; ++ j)は{
 15                          であれば(J ==0続けます16                           STR = T。
17                          STR [I] =((T [I] - ' 0 ')+ 10 + J)%10 + ' 0 ' 18                          であれば(STR ==ターゲット)戻りRES。
19                          もし(visited.count(STR)&&!q.push(STR)deadlock.count(STR));        
20                          visited.insert(STR)。
21                      }
 22                  }
 23              }
 24          }
25          リターン - 1 26      }
 27 }。

 

追加の知識

イテレータ

私たちが知っているように、プログラムが多数の反復が含まれ、これらの反復は、の場合と同様に、ループ内で行われています。

反復(繰り返し):の一種である挙動特定の血管、トラバース動作のために、。

反復可能オブジェクト(反復処理可能)は:である容器、等セット、リスト、ベクトル、として、データの山の内側に取り付けられており、この容器は、繰り返し操作であってもよいです。

何が反復子(イテレータ)それは?

反復子がデバイスのデータが含まれている操作対象のための缶と同様であり、ボタンが動作することができる(例えば、C ++、開始最後に、等[1] )、我々は簡単に使用することができ、操作パッケージ化されたデータ。

別の問題は、以下の実施例[2]のように、存在します。

std ::ベクトル< 整数 > V。
以下のために(ベクトル< int型 > ::イテレータITER = v.begin(); ITER = v.end();!++ ITER)
{ 
    // ITERでいろいろ書いを行います 
}

V理解することができ、それがベクトルです。ベクトル<整数>イテレータ型も理解することができますが、何される)(v.begin

辞書には、[1]イテレータは、そのリターンを開始しています。何fxxk?イテレータの始まりは何ですか?イテレータは、オブジェクトを操作することができませんか?私は中国のウェブサイトやブログの多くを確認し、それは非常に満足のいく説明は思えません。その後、その英語の通訳が見つかりました:開始()関数は、イテレータを返すために使用されているコンテナでのベクトルの最初の要素で指し。

 

これは明らかに優れ、v.begin()は、それが、特定のイテレータである容器の最初の要素を指すイテレータです

またイテレータであるv.endを()、注意、それはコンテナの最後の要素の次の位置に反復子です。

使用例[3]

書式#include <iostreamの>  
の#include <ベクトル> 
 使用して 名前空間はstdを、
  
INT メイン()
{ 
    // ベクトルコンテナの宣言 
    ベクトル< INT > myvector { 12345 }。
  
    // エンド()ベクトルを印刷する使用
    のために(;それ= myvector.end();!++自動それは(myvector.beginを=)それ)
        はcout << '  ' << * それを。 
    リターン 0 ; 
}

 

出力は次のようになります。

1 2 3 4 5

また、iteatorの種類を検討する気にしない、あなたは直接autoを使用することができます

 

挿入&見つけます

イテレータを使用する利点は、あなたが良い機能の束を提供するために使用できるということです、この例では、挿入中に発見し、見つけることができます。
:応答モードに示すように、参照して詳述されてもよい http://c.biancheng.net/view/570.html
 
 

 

[1]:  http://c.biancheng.net/view/409.html

[2]:https://qinglinmao8315.github.io/c++/2018/03/07/how-std-vector-end-work.html

[3]:  https://www.geeksforgeeks.org/vectorbegin-vectorend-c-stl/

おすすめ

転載: www.cnblogs.com/kykai/p/11421708.html