C ++(A)------- STLやジェネリックプログラミングを終えインタビューの質問とノート

ここでは、ここまで合計することが、学習過程で遭遇インタビューのトピックで自分自身をテストするために、いくつかの可能性があります:

STLやジェネリックプログラミングの一部

1. STLジェネリックプログラミングの関係

2.何であるSTLは6つのコンポーネント、それぞれ、どのような役割?

容器部

コンテナと関連付けられているコンテナの順序
コンテナと関連付けられているコンテナのために、いくつかのものは、それを強化し、この中で、忘れやすい書き込みません。

(1)vector<int>a、5つの要素を想定し、そして今、あなたはどのように書くかの2番目の要素を削除したいですか?最初の要素及びそれ3に第二要素との間に?

シーケンシャルコンテナを使用する場合(2)、ベクトルコンテナは真ん中に適していない、ということに注意することは、ベクトルとベクトルを使用しようと繰り返し要素を削除したり、追加し、追加/要素を削除の終了時に頻繁にのみ適しベクトル、あなたがする必要がある場合中間要素が追加され、2つの解決策は何ですか?

どの2つのC ++ 11追加され、合計でいくつかの容器構造(3)C ++のどの順序?

(4)vector<vector<int>>aどのように行と列の2次元アレイを表しますか?

(5)ベクター容器の最大値は、例えば、検索方法を示してvector<int>num最大値と最小値と、

(6)安定ソートされた容器、マップ、セット、マルチマップおよびマルチセットに関連付けられていますか?

(7)設定基本的な連想コンテナを達成するためにどのように?

アダプタ部分
1.STLは3つのコンテナアダプタが用意されています。スタック、キュー、PRIORITY_QUEUEを、特定のプロセスがどのように達成することですか?

アルゴリズムセクション

イテレータ一部

1.イテレータとは何ですか?


回答

STLとジェネリックプログラミング

1. STLジェネリックプログラミングの関係

STL:標準テンプレートLibrary--標準テンプレートライブラリ、STLは、さまざまなコンテナを取り扱うためのテンプレートオブジェクトのセットです。ジェネリックプログラミング - STLは、プログラミングモデルを示しています。

2. STLは6つのコンポーネント、すなわち、どのような役割は何ですか?
STL 6つの主要コンポーネント:
アルゴリズム(アルゴリズム)は
容器の操作に使用されるテンプレートデータの関数です。
例えば、データのソートとSTL()ソートのベクターは、(検索)は、単純な配列からとすることができるようにかかわらず、機能自体とその操作データの構造及び種類の、リスト内のオブジェクトを検索します容器の任意の高度に複雑なデータ構造を使用します。

容器(コンテナ)
テンプレートクラスのメソッドを提供するために、そのようなリスト、ベクター、およびdequeのようなデータ構造です。データコンテナにアクセスするために、容器からイテレータクラスの出力を使用することができます。

反復子(イテレータ)は
コンテナオブジェクトへのアクセスを提供します。例えば、イテレータのペアが特定の範囲内にベクターまたはリストのオブジェクトを指定しました。ポインタのようなイテレータ。実際には、C ++のポインタもイテレータです。しかし、反復はまた、これらの定義された演算子*()およびオブジェクト・クラスのメソッドへのポインタのような他の事業者であってもよいです。

ファンクタ(ファンクタ)
も関数オブジェクト(関数オブジェクト)として知られているファンクタ(ファンクタ)、それが実際にオーバーロードされている()演算子構造体、何も特別な場所

容器アダプター(アダプター)
アダプターさらにコンテナアプリケーションシナリオに適応するためにカプセル化され、コンテナ基礎となるデータ構造のシーケンスです。STLは3つのアダプタ、それぞれ、スタック、キューとPRIORITY_QUEUEを提供します。

空間ディスペンサ(アロケータ)
主作業は二つの部分1オブジェクトの作成及び破壊の2メモリの取得および解放を含みます

容器部

コンテナと関連付けられているコンテナの順序
回答:
(1)vector<int>a、5つの要素を想定し、そして今、あなたが書く方法の第二の要素を削除したいですか?最初の要素及びそれ3に第二要素との間に?

A:a.erase(a.begin()+1)またはa.erase(a.begin()+1,a.begin()+2);

    a.insert(a.begin()+1,3);

シーケンシャルコンテナを使用する場合(2)、ベクトルコンテナは真ん中に適していない、ということに注意することは、ベクトルとベクトルを使用しようと繰り返し要素を削除したり、追加し、追加/要素を削除の終了時に頻繁にのみ適しベクトル、あなたがする必要がある場合中間要素が追加され、2つの解決策は何ですか?

:その後、ソートするソート()関数を使用することができます1.リアプラス
2.リストは、最初のリストVector内のコピーを使用することができます。

どの2つのC ++ 11追加され、合計でいくつかの容器構造(3)C ++のどの順序?
:ベクトル、リスト、forward_list、両端キュー 、配列、文字列。forward_listと、アレイは、組み込みの配列array、使用する方が安全と比べて、新しく追加されました。

(4)vector<vector<int>>aどのように行と列の2次元配列を表す?
:行数()は、列の数[0] .sizeマットにmat.size。

(5)ベクター容器の最大値は、例えば、検索方法を示してvector<int>num最大値と最小値と、

このアルゴリズムについては、ヘッダ・ファイル<algorithm>内部。そしてmax_element min_element関数内部アルゴリズムを使用して反復子が複雑なポインタであるため、ポインタ値のような最高の価値を得ることができ、容器の内部イテレータ最も値を返すことができます。

#include<algorithm>
#include<vector>
#include<iostream>
using std::vector;
using std::max_element;//do not forget
using std::min_element;
int main(){
     vector<int>num{1,2,3,4,5};
     vector<int>::iterator max=max_element(num.begin(),num.end());
     vector<int>::iterator min=min_element(num.begin(),num.end());
     std::cout<<"最大值为"<<*max<<std::endl;
     std::cout<<"最小值为"<<*min<<std::endl;
}

(6)安定ソートされた容器、マップ、セット、マルチマップおよびマルチセットに関連付けられていますか?

:マップと安定したソート、マルチマップを設定し、安定した並べ替えをしませ多重集合。

(7)設定基本的な連想コンテナを達成するためにどのように?

:どのように設定する基本的な連想コンテナを達成するために?

イテレータ
1.イテレータとは何ですか?

反復子は、同様の動作へのポインタであってもよい、実際に、それはポインタであり得る、一般的なポインタであるオブジェクトの(例えば接触参照演算子*()および増分オペレータ++()として)行います。STLは、異なるコンテナのための統一されたインターフェースを提供するようにポインタで、イテレータに一般化。

イテレータのtypedefイテレータの型は、クラス全体のスコープと呼ばれています。

PS:一部のコンテナは、反復子要素値を表現するために使用できるだけでなく、要素は、ベクターとして、要素インデックス値によって表すことができる同時に添字とイテレータで表すことができます。
しかし、実際にはコンテナのほとんどは、イテレータを使用してコンテナ要素の値を呼び出すためだけです。

参考文献:
https://blog.csdn.net/u014744118/article/details/50727193

おすすめ

転載: blog.csdn.net/alexhu2010q/article/details/81744036