C ++入門書の学習への道-(第16章STLテンプレートシーケンスコンテナ)

STLの複数のコンテナと構造

1.配列(シーケンシャルコンテナ)

構造図:

長さのサイズが指定されており、スペースを動的に拡張することはできません

定義:

#include <array>
array<double,10>ary = {1,2,3,4,5,6,7,8,9,10}; //必须有第二个参数,要指定有多大

関数:

1.get

これはグローバル関数であり、配列テンプレートによって保持されません

get(要素オフセット、要素タイプ、配列内の要素ブック、そこから選択された配列)

#include <array>
array<int,4>c0={1,2,3,4};
get<1>(c0);

 

2.begin()

配列の最初の位置のイテレータを取得します

2.end()

配列の最後の位置の次の位置へのイテレータを取得します

3.size()

配列の長さを取得します

4.back()

配列の最後の要素の値を取得します

5.data()

最初の住所を取得する

6.front()

配列の最初の位置の値を取得します

2.Vector(シーケンシャルコンテナ)

構造図:

ベクトルは後方に拡張するコンテナです。スペースが不足している場合は元のサイズの2倍に拡張され、不足している場合は元のサイズの2倍になります。

彼らの住所も継続的です

ベクトルサマリーポータル:https//blog.csdn.net/z1455841095/article/details/82668794

3. Deque(シーケンシャルコンテナ)

出入りできる双方向開口部のある容器。

構造図:

これは、表面に表示されるものが次のようなものです。

実際、次のように具体的です。

 最初のグラフコンテナは、バッファスペースのセクションを指すアドレスを格納します。これは、2番目のグラフがどのように見えるかによって異なります。

両端がいっぱいになったときに、要素を追加するためにpush_backを続行すると、Dequeコンテナーはストレージ用のバッファーを自動的に開き、一見連続したアドレスがそれを指します。

逆に、push_frontを使用すると、バッファも開きます。

4.リスト(シーケンシャルコンテナ)

二重リンクリスト

構造図

 

コード例:

#include<iostream>
#include <cstdlib>
#include <ctime>
#include <list>
#include <string>
#include <cstring>
#include <exception>
#include <array>
std::string get_a_target_string();
int main()
{
	using namespace std;
	srand(time(0));
	long value;
	cout << "how many elements: ";
	cin >> value;
	cout << "\ntest_list()........... \n";
	list<string>c;
	char buf[10];
	clock_t timeStart = clock();
	for (long i = 0; i < value; ++i)
	{
		try 
		{
			snprintf(buf, 10, "%d", rand());
			c.push_back(string(buf));
		}
		catch(exception & p)
		{
			cout << "i = " << i << " " << p.what() << endl;
			abort();//返回
		}
	}
	cout << "milli-seconds: " << (clock() - timeStart) << endl;

	cout << "list.size(): " << c.size() << endl;
	cout << "list.max_size(): " <<c.max_size() << endl;

	cout << "list.front(): " << c.front() << endl;
	cout << "list.back(): " << c.back() << endl;
	string target = get_a_target_string();
	timeStart = clock();
	auto pItem = find(c.begin(), c.end(), target);
	cout << "::find(), milli-seconds : " << (clock() - timeStart) << endl;
	if (pItem != c.end())
	{
		cout << "found, " << *pItem;
		cout << endl;
	}
	else {
		cout << "Not Found! " << endl;
	}

	timeStart = clock();
	c.sort();
	cout << "c.sort() milli-seconds : " << (clock() - timeStart) << endl;

	system("pause");
	return 0;
}
std::string get_a_target_string()
{
	using std::cin;
	using std::cout;
	int value;
	cout << "target (0~" << RAND_MAX << ": ";
	cin >> value;
	char buf[10];
	snprintf(buf, 10, "%d", value);
	return std::string(buf);
}

リストには単一のソートメンバーがあります。

スペース使用率が最も高い注文コンテナが最も効率的ですが、ソート時間は遅くなります

5.Forward_list(シーケンシャルコンテナ)

単一リンクリスト

構造図:

 Forward_listには、一般的に使用される別の並べ替えがあります

6.スタック(シーケンシャルコンテナ)

スタックコンテナ(最初から最後までのコンテナです)

構造図:

 関数:

1.プッシュ

要素をスタックコンテナにプッシュします

2.pop

スタックから最後の要素を削除します


7.キュー(ヒープコンテナ)

彼は先入れ先出しコンテナです

 関数:

1.プッシュ

要素をスタックにプッシュします(後で追加)

2.pop

常に最初の要素をスタックから削除してください

おすすめ

転載: blog.csdn.net/z1455841095/article/details/82696865
おすすめ