第6章C ++標準テンプレートライブラリ(STL)の紹介研究ノートのアルゴリズムノート

詳細6.1ベクトルの一般的な使用

ベクター:可変長アレイのアレイ、必要に応じて自動的に変更の長さ

すなわちする#includeベクター、ヘッダーを追加するためのベクターの必要性、<ベクトル>を使用するように、ヘッダファイルはまたに以下を追加する必要がある「を使用して名前空間std;」

1.vector定義

単一のベクトルを定義します

ベクトル<型名>名前;

型名は任意の塩基の種類、例えばint型、ダブル、チャー、および他の構造であってもよい、セット、キューのような、例えばベクター、標準のSTLコンテナであってもよいです。

時間は型名のSTLコンテナである場合は、>>記号を加えた空間の間に覚えておくことが定義されました。

メソッド定義された配列のベクター:ベクター<型名> Arrayname [ARRAYSIZE]。

そのようなArrayname [0]〜Arrayname [ARRAYSIZE-1]は、各容器のベクトルです。

 

2.vectorコンテナ要素内のアクセス

添字(1)アクセス

ベクトル<型名> VI。

我々[インデックス]

0からvi.sizeにインデックス() - 1

(2)反復子を介してアクセス可能

ベクトル<型名> ::イテレータそれ:

例えば:

ベクトル<整数> ::イテレータそれ。

ベクトル<ダブル> ::イテレータそれ。

書式#include <cstdioを> 
する#include <ベクトル>
 使用して 名前空間はstdを、
INT メイン(){
    ベクトル < int型 > VI。
    以下のためにINT iが= 1 ; I <= 5 ; I ++ ){
        vi.push_back(I);
    }
    ベクトル < int型 > ::イテレータそれは= vi.begin();
    以下のためにINT iは= 0 ; I < 5 ; I ++ ){
        printf(" %d個"、*(それ+ I));
    }
    リターン 0 ;
}

 

 VI [i]と*(vi.begin()+ i)は等価です

カナダからのイテレータはまた、2つの操作を実装:++それとそれ++

書式#include <cstdioを> 
する#include <ベクトル>
 使用して 名前空間はstdを、
INT メイン(){
    ベクトル < int型 > VI。
    以下のためにINT iが= 1 ; I <= 5 ; I ++ ){
        vi.push_back(I);
    }
    以下のための(ベクトル< int型!;;それ= vi.end()それ++> ::イテレータそれは= vi.begin(){)
        printf(" %d個"、* それ)。
    }
    リターン 0 ;
}

 

ベクターのみと文字列のみ許可vi.begin()+ 3は、この反復子プラス整数を書き込ま。

 

一般的に使用される分析関数3.vectorの例

(1)一back(x):xがベクトルの背後に要素を追加し、時間計算量はO(1)であります

(2)pop_back()は:ベクトルの最後の要素を削除し、時間計算量はO(1)であります

(3)サイズ():得られたベクトルの要素数は、時間計算量はO(1)であります

(4)()クリア:クリアベクトルのすべての要素、時間計算量はO(N)であり、Nは、ベクトルの要素数であります

(5)挿入():挿入(I、X)は、時間複雑でそれ反復子任意の要素xベクトルを挿入するために使用されているO(N)であります

(6)消去()は、2つの方法で:個々のアイテムを削除するには、範囲内のすべての要素を削除します。

    図1に示すように、単一要素vi.erase(vi.begin()+ 3)を削除し、削除VI [3]

    2、セクションは、すべての要素を削除します。vi.erase(vi.begin()+ 1、vi.begin()+ 4); VI削除VI [1]、[2]、VI [3]

4.vectorの一般的な用途

(1)データを格納します

(2)隣接テーブルストレージ図。

PAT A1039学生のためのコース一覧

浙江大学は、40000人の学生を持っており、2500回のコースを提供します。今、すべてのコースの生徒の名前のリストを与え、あなたは出力に、クエリのために来て、各学生のための登録コースのリストを想定しています。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。:各ケースについて、最初の行には2つの正の整数が含ま  N(≤)、そのコースのリストを探して、学生の数、および  K(≤)、コースの合計数を。その後、生徒の名前のリストは、(1からに番号が付けコースのために与えられる  次の形式でK):各コースのために  私は、最初のコースのインデックスは  iと登録学生数  N iは≤)Aに記載されていますライン。そして、次の行では、  N I 生徒の名前が与えられています。生徒の名前は3つの資本英文字プラス1桁の数字で構成されています。最後に、最後の行が含まれています クエリのために来る学生のN名。行のすべての名前と番号は、スペースで区切られます。

出力仕様:

各テストケースの場合は、内検索結果印刷  Nラインを。最初の増加順に登録した学生のコース、及びコースの最終的指標の総数が、その後、生徒の名前を印刷する次の形式で一人の学生、各ラインに相当します。クエリ結果は、入力と同じ順序で印刷されなければなりません。ライン内のすべてのデータは、行の末尾に余分なスペースを、スペースで区切らなければなりません。

サンプル入力:

11 5
4 7
BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
1 4
ANN0 BOB5 JAY9 LOR6
2 7
ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6
3 1
BOB5
5 9
AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6 NON9

サンプル出力:

ZOE1 2 4 5
ANN0 3 1 2 5
BOB5 5 1 2 3 4 5
JOE4 1 2
JAY9 4 1 2 4 5
FRA8 3 2 4 5
DON2 2 4 5
AMY7 1 5
KAT3 3 2 4 5
LOR6 4 1 2 4 5
NON9 0

 

#include <cstdioを> 
する#include <CStringの>  
する#include <ベクトル> 
の#include <アルゴリズム>
 使用して 名前空間をSTD。
const  int型 N = 40010 ;
CONST  INT M = 26 * 26 * 26 * 10 + 1 
ベクター < INT > selectCourse [M]。

INTのgetId(チャー名[]){
     int型の ID = 0 以下のためにINT iは= 0 ; I < 3 ; I ++ ){
        ID = ID * 26 +(名前[I] - [ A ' )。
    }
    ID = ID * 10 +(名[ 3 ] - ' 0 ' )。
    戻り値のID。
}
INT メイン(){
     チャー名[ 5 ]。
    整数N、K。
    scanf関数(" %D%D "、&​​N&K)。
    以下のためにINT iが= 0 ; I <K; I ++ ){
         int型もちろん、X。
        scanf関数(" %D%D "、&もちろん、&X)
        int型 J = 0 ; J <X; J ++ ){
            scanf関数(" %sの" 、名);
            INT ID = のgetId(名);
            selectCourse [ID] .push_back(コース)。
        }
    }
    以下のためにINT iが= 0 ; N I <; Iは++ ){
        scanf関数(" %sの" 、名);
        INT ID = のgetId(名);
        ソート(selectCourse [ID])(.begin、selectCourse [ID] .END())。
        printf(" %sの%D " 、名前、selectCourse [ID] .size())。
        INT J = 0 ; J <selectCourse [ID] .size(); J ++ ){
            printf(" %dの" 、selectCourse [ID] [J])。
        }    
        printf(" \ n個" );
    }
    リターン 0 ;
}

 

おすすめ

転載: www.cnblogs.com/coderying/p/11914193.html