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
常に最初の要素をスタックから削除してください