クイックソート
クイックソートは、古典的なアルゴリズムです。
#include <アルゴリズム> // ヘッダ ソート(A、A + N); // 記憶インデックスは、0から昇順に長さnの配列を開始するため
ベクトルコンテナ
ベクトルコンテナ。要素の数とサイズの変更など。それは実際には配列よりもはるかに強い配列、です。
のは、その事業のいくつかを見てみましょう:
ベクター< INT > V; // 定義 V.push_back(X)を; // 要素Xの最後に追加 ; V.pop_back()// エンド要素削除 、v.sizeを()// コンテナ内の要素の数を返します
また、添字を使用してアクセスすることができます。(0から始まります)
そして正常キュー、それはこれらの基本的な操作有するもの: v.sizeを(); //はQ内の要素の数を返す V.empty(); // Qが空であるかどうかを返し、戻りヌル1、そうでなければ0 V.push (K); // Kの端部Qに挿入 ; V.pop()// 最初の要素は、Qが削除される --- 最も重要な操作 V.topは(); // 最初の要素qを返します
ビットセット
元の32の基礎で割っ複雑にビット集合圧力レベル
#include <ビットセット> ビット集合 <N> S; // ビットセットアップ構築するこの S. SETを(); // すべてなる1。 S.reset(); // すべてが0になる )(S.count。//は数1を返し 、S.flip()// S反転置く各ビット S.flip(I); // 最初の私が否定され S.anyを(); //はかどうかが返さ1 S.none(); //は何の場合は1を返し ///が、彼らは一見回帰し使用されているオペレーティングこのことを認識していなかったと述べていない (a.to_ulong)// unsigned long long型の数に変換されます。 // ビットセットのサポートビット演算、非常に強い。 Aとして = A&B; A = A ^ B; A = A | B。
地図
#include <マップ> 地図 <TYPE1、TYPE2> A; // これは、マップを定義 添字がTYPE1の種類を表し、TYPE2番号のタイプを示すことに留意されたい格納されている。 地図、例えば、 < 文字列、INT > A、地図< INT、INT > A ... 修飾、同様に使用されている:[タイプ1] = タイプ2の a.erase(タイプ1)//は数取り外し示す (a.clearを); // 空 a.empty(); //は空気か否かを判断 a.size(); //は、Aの要素の数を返します
マップの使用または多く。
一般的に、我々が定義することに注意してください
マップ< int型、int型 > H;
あなたが特定の場所を割り当てたい場合は、直接呼び出すことができます
H [X] Yを=。
ほぼすべての私たちのは、唯一のSTLコンテナを使用することができますので、しかし、それを注意してください
::イテレータit。
私たちが対応する値を知りたい場合は、使用して、位置を取得するには
それは - >最初にそれを或 - > seond
二つの操作。
最後に、我々はセットに似ているので、彼はまた、最小値と最大ログloglog関数を見つけるサポートマップを達成するために知っておく必要があります。
具体的には、呼び出すことができます。
用(<マップINT、INT、それ= h.end();!> ::)は、(h.beginを=イテレータそれ++ ){ のprintf(" %d個の\ n "、IT-> 最初の) H [それ - >最初] = 1 。 }
セット
書式#include < 設定 > 設定 < 整数 > A; // これは、一連の構築するに注意することが重要に:重複した要素をサポートすることはできませんセット、繰り返しの要素を持っている、あなたはマルチセットを使用することができますしたい 多重集合を < 整数 > A; // それが挿入された重複した要素をサポートすることができます。 a.insert(X); //は、セット内に挿入X元素を表す。 a.erase(X); //は削除xの数があるすべての集合を表す。 a.erase(a.find(X) ); // これは、削除Xのことを示し、 *のa.begin()// 最小値を表す * a.end()// 最大値の位置を示す - a.end()* // 最大値を示し// 戻りイテレータであるため、具体的な数値は、数*の前に追加されます。 時々イテレータを複数回使用する必要があり、私たちは彼を入れて保存することができ、それが表され、それは次のように定義されています。 多重集合は、 < 整数 > :: ITをイテレータ; // 。以下、上記最小値のような、そう表すことができる= IT()a.begin、のprintf( "%Dの\のN-"は、* IT) ITは下記で表すことができる++ ++ので、位置の要素は、当然のことながら、虐待していない時間の複雑さをログに記録する必要があります。。 ここで、上記2つのベクトル演算の内部にある二つの最も重要なセット動作、すなわちLOWER_BOUNDと,. UPPER_BOUND ITは a.lower_bound(X)= //は、第1要素イテレータを見つけるために、以上示しては、X が=。 UPPER_BOUND(X)//は、反復子の最初の要素を見つけるXより大きい表します
CTIME
+ランダムなテスト時間の使用
いくつかの点で - ランダム関数を使用するためにポイントをカンニングするために使用することができ、次回我々は言及します
srand関数(時間(0))// ランダムシードは、ノーランダムにこのようなもの、ランダム同等のを持っていません。 主なポイントはこれです: int型 ST = クロックを(); // STHのやる のprintf(" N- \%のLFを"、(ダブル)(時計() - ST)/ CLOCKS_PER_SEC)
注ヘッダファイルが含まれています
書式#include <stdlib.h>に含ま
する#include <TIME.H>