C++_STL筆記1




近期發覺一些設備商開發的UI應用
底層多數使用之程式語言

都是採用  C/C++


有很多這種符號   ::    或者  *


相信未來在一些需求上會很常碰到
再次來溫故暖身一下

===========================================================


STL  基本上  標準模板庫
是一種   容器之集合  , 組件之集合
更包括許多基本算法,我們許多聰明優秀開發的程式開發者
可以將一些算法進行容器之套用。


其主要組件有   「容器」、「迭代器」、「算法」、仿函数( functor ) 。


容器(Container):   list , vector , set , map .....  等等
主要用途:管理一些特定類(物件)之集合。


疊/迭代器(iterator):
主要用途:針對某特定物件群集之元素進行遍歷。

算法(Algorithms):
主要用途:用來處理群集中元素。

===========================================================
STL  結構示意

===========================================================

容器(Container)
常見的

vector<T>      :一種向量
List<T>          :一種雙向鏈表
Queue<T>      :一種佇列容器           --->排隊     =>先進先出(FIFO)
Stack<T>        :一種堆疊(棧)容器     --->疊盤子 =>後進先出(LIFO)
Deque<T>      :一種雙端佇列容器
Set<T>           :一種集合容器
Map<key,value>:一種關聯陣列容器



又可分為  兩大類

【1】序列式容器
vector、List、Queue、Stack、Deque


【2】關聯式容器
Set、Map

===========================================================

算法(Algorithm)

STL 提供眾多給程式設計師相關資料結構算法

定義於  <algorithm>  的  Header檔案之中

STL眾多算法 主要根據 模板 去實踐  --> 類型依賴於疊代器,不侷限於單一容器!!

不同STL算法需要不同類型疊代器去實踐相應功能,
因為不同類型之STL容器支持不同類型之疊代器。
因此不能對所有容器皆使用相同之算法。
===========================================================
疊/迭代器(iterator)

即   「指示器」
又可以視為  C++的指標
可以使我們針對 STL容器內容進行反覆訪問(遍歷)
一次可一至多個
此外 疊代器 還可以被修改、引用


主要定義了  四種類型

輸入疊代器:
給輸入資料(一般指容器、資料流)提供輸入接口介面,僅能從一個序列中讀取資料。

輸出疊代器:
主要用於輸出程式已獲得之資料結果(Ex:容器、資料流),僅能針對一個序列中寫入資料


雙向疊代器:
可同時進行前向、後向資料操作。
換言之就是可讀又可寫(同時)
PS:所有STL容器皆有提供此功能!!!


隨機接入疊代器(最具彈性、靈活):
可透過跳躍方式訪問任意資料元素,具備雙向疊代的所有功能

===========================================================
仿函數(functor)

可以視為函數的一般形式。
仿函數有幾種約束,於一般C++規範,函數調用多使用指標,
當需要調用函數時,只需要告訴函數之位址(地址)即可。
===========================================================
內存配置器(memory allocation)

包含底層之內存分配  以及  釋放

STL 中提供三種配置器


  1. Stack<Container>
  2. Queue<Container>
  3. Dequeue<Container>



一個簡單 Stack 使用示範


在接下來我們可以熟悉常用的  vector容器使用

Vector 示例


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// vectorEx.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
using namespace std;
const int NUM = 5;

int _tmain(int argc, _TCHAR* argv[])
{
 vector<string> names(NUM);
 vector<int> sexs(NUM);

 cout << "Please Do Exactly As Told.Tou Will enter\n" << NUM << "Personal Name Their Sex.\n";

 int i = 0;

 for (i = 0; i < NUM; i++)
 {
  cout << "Enter Name#" << i + 1 << ":";
  getline(cin, names[i]);
  cout << "Enter sex(0/1)# ,0:male/1:female=>";
  cin >> sexs[i];
  cin.get();
 }
 cout << "Thanks for entering following:\n" << "name/sex" << endl;

 for (i = 0; i < NUM; i++)
 {
  cout << names[i] << "\t" << sexs[i] << endl;
 }


 return 0;
}

即可獲得如下輸入後對應輸出結果

用法在起初使用上  非常像 Array








留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題