在學習類的部分學習完後,我們進行了運算子過載與stl部分的學習。通過這種方式,來進行這部分的總結與複習。
一. 運算子過載
1. 為什麼要過載運算子:
c++預定義中的運算子的操作物件只侷限於基本的內建資料型別,但是對於我們自定義的型別(類)是沒有辦法操作的。但是大多時候我們需要對我們定義的型別進行類似的運算,這個時候就需要我們對這麼運算子進行重新定義,賦予其新的功能,以滿足自身的需求。
運算子過載使得使用者自定義的資料以一種更簡潔的方式工作。
2.過載運算子的限制:
過載運算子函式可以對運算子做出新的解釋,但原有基本語義不變:
1.不改變運算子的優先順序
2.不改變運算子的結合性
3.不改變運算子所需要的運算元
4.不能建立新的運算子
3.運算子函式可以過載為成員函式或者友元函式。
兩者區別:
對雙目運算子而言,成員運算子函式的形參表中僅有乙個引數,它作為運算子的右運算元,此時當前物件(然後友元函式卻不能這樣)作為運算子的左運算元,它是通過this指標隱含地傳遞給函式的。
對單目運算子而言,成員運算子函式的參數列中沒有引數,此時當前物件作為運算子的乙個運算元。
4.兩者比較:(1.)成員運算子函式比友元運算子函式少帶乙個引數
(2.)雙目運算子一般可以被過載為友元運算子函式或成員運算子函式,但當運算元型別不同時,必須使用友元函式。
5.幾種特殊情況:
(1.)運算子【】和()是二元運算子,只能用成員函式過載,不能用友元函式過載。
(2.)過載輸出(輸入)運算子只能用友元函式過載。
6.友元函式過載輸出(輸入)運算子:
(1.)istream和ostream是c++的預定義流類。
(2.)cin是istream的物件,cout是ostream的物件。
(3.)運算子《由ostream過載為插入操作,用於輸出基本型別資料
(4.)運算子》由istream過載為提取操作,用於輸入基本型別資料。
定義輸出運算子「<<」過載函式的一般格式如下:
ostream& operator<<(ostream& out,class_name& obj)
二.stl
1. stl簡介
(1. )stl是c++標準程式庫的核心,深刻影響了標準程式庫的整體結構。
(2.)stl由一些可適應不同需求的集合類(collection class),以及在這些資料集合上操作的演算法(algorithm)構成
(3.)stl內的所有元件都由模板(template)構成,其元素可以是任意型別。
(4.)stl是所有c++編譯器和所有作業系統平台都支援的一種庫
2.stl元件
容器(container)——管理某類物件的集合
迭代器(iterator)——在物件集合上進行遍歷
演算法(algorithm)——處理集合內的元素
容器介面卡(container adaptor)
函式物件(functor)
3.stl容器類別
(1.)序列式容器——排列次序取決於時機和位置
(2.)關聯式容器——排列順序取決於特定準則
stl容器的共同能力:
所有容器中存放的都是值而非引用。如果希望存放的不是副本,容器元素只能是指標。
所有元素都形成乙個次序(order),可以按相同的次序一次或多次遍歷每個元素。
stl容器元素的條件:
必須能夠通過拷貝建構函式進行複製
必須可以通過賦值運算子完成賦值操作
必須可以通過析構函式完成銷毀動作
序列式容器元素的預設建構函式必須可用
某些動作必須定義operator =,例如搜尋操作
關聯式容器必須定義出排序準則,預設情況是過載operator <(對於基本資料型別(int,long,char,double,……)而言,以上條件總是滿足)
4.stl容器的共同操作:
初始化:
產生乙個空容器
1.以另乙個容器元素為初值完成初始化
2.以陣列元素為初值完成初始化。
與大小相關的操作:
size( )返回當前容器的元素數量
empty( )—判斷容器是否為空
max_size( )—返回容器能容納的最大元素數量。
比較比較操作兩端的容器必須屬於同一型別
如果兩個容器內的所有元素按序相等,那麼這兩個容器相等
採用字典式順序判斷某個容器是否小於另乙個容器
賦值和交換
swap用於提高賦值操作的效率
與迭代器相關的操作
begin()—返回乙個迭代器,指向第乙個元素
end()—返回乙個迭代器,指向最後乙個元素之後
rbegin()—返回乙個逆向迭代器,指向逆向遍歷的第乙個元素
rend()—返回乙個逆向迭代器,指向逆向遍歷的最後乙個元素之後
元素操作
insert(pos,e)—將元素e的拷貝安插於迭代器pos所指的位置
erase(beg,end)—移除【beg,end】區間內的所有元素
clear()—移除所有元素
5.迭代器
可遍歷stl容器內全部或部分元素的物件
指出容器中的乙個特定位置
6.容器:
經過學習了解到了:vector、map/multimap、set/multiset
還了解學習了一小部分演算法問題,在這裡不做詳細總結。
C 運算子過載和STL部分學習總結
一,運算子過載 1,過載運算子的限制 過載運算子函式可以對運算子做出新的解釋,但原有基本語義不變 1 不改變運算子的優先順序 2 不改變運算子的結合性 3 不改變運算子所需要的運算元 4 不能建立新的運算子 2,用成員或友元函式過載運算子 1 一元運算子 object op 或 op object ...
運算子過載和STL
include using namespace std class printdata public void print int i void setlength double len void setbreadth double bre void setheight double hei 過載 ...
STL 過載運算子
過載運算子 為什麼要過載運算子 c 中預定義的運算子的操作物件只能是基本資料型別。但實際上,對於許多使用者自定義型別 例如結構體 也需要類似的運算操作。這時就必須在c 中重新定義這些運算子,賦予已有運算子新的功能,使它能夠用於特定型別執行特定的操作。運算子過載的實質是函式過載,它提供了c 的可擴充套...