重載運算符和stl總結



一丶重載運算符

1.用成員函數重載運算符
class x{

//...

返回類型 operator 運算符(形參表);

};

返回類型 X:operator 運算符(形參表)

{

     函數體;

}
或者改寫的更簡練一些。

Complex Complex::operator+(Complex &c2)

{   return Complex(real+c2.real,image+c2.image);}
2.對運算符重載的函數有兩種處理方式
(1)把運算符重載的函數作爲類的成員函數;
(2)運算符重載的函數不是類的成員函數,在類中把它聲明爲友元函數。
注意!
重載運算符後,不改變其原來的功能
不改變運算符的優先級
不改變運算符的結合性
 不改變運算符所需要的操作數
不能創建新的運算符
運算符函數可以重載爲成員函數或友元函數

●一元運算符

  Object op    或    op Object

Ø  重載爲成員函數,解釋爲:

      Object . operator op()

      操作數由對象Object通過this指針隱含傳遞

Ø重載爲友元函數,解釋爲:

      operator op (Object)

    操作數由參數表的參數Object提供

●二元運算符

Ø  重載爲成員函數,解釋爲:

      ObjectL . operatorop ( ObjectR )

    左操作數由ObjectL通過this指針傳遞,右操作數由參數ObjectR傳遞

Ø重載爲友元函數,解釋爲:

      operator op (ObjectL, ObjectR )

    左右操作數都由參數傳遞
二丶STL
1.vector

vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮數據。爲了可以使用vector,必須在你的頭文件中包含下面的代碼:#include <vector>構造函數。

用法

vector<T>c 產生空的vector.

vector<T>c1(c2) 產生同類型的才,並複製c2的所有元素。

vector<T>c(n)生成容器爲n的vector。

vector<T>c(beg,end)產生一個vector以區間[beg,end]爲元素初值、

~vector<T>()銷燬所有元素,並釋放內存。

c.size()返回元素個數。

c.empty() 判斷元素是否爲空。

c.max_size() 返回元素最大可能數量。

c.capacity()返回重新分配空間前可容納的最大元素數量。

c.reserve(n)  擴大容量n。

c1==c2  判斷C1是否等於c2.

c1=c2  將c2的全部元素賦值給c1.

c.assign(beg,end) 將區間[beg,end]的元素賦值給c。

c1.swap(c2)將c1和c2 元素互換。

swap(c1,c2) 同上。

at(idx) 返回索引idx所標識的元素的引用。進行越界檢查

operator[](idx) 返回索引idx所標識的元素的引用。不進行越界檢查

front() 返回第一個元素的引用,不檢查元素是否存在。

back()返回最後一個元素的引用,不檢查元素是否存在。

rbegin() 返回一個逆向迭代器,指向逆向遍歷的第一個元素。

rend() 返回一個逆向迭代器,指向逆向遍歷的最後一個元素。

c.insert(pos,e) 在pos位置插入元素e的副本,並返回新元素的位置。

c.insert(pos,n,e) 在pos位置n個元素e的副本。

c.insert(pos,ben,end)在pos位置插入區間[beg,end)內所有元素的副本。

c.push_back()   在尾部添加一個元素e的副本。

c.pop_back() 移除最後一個元素但不返回最後一個元素。

c.erase(pos) 刪除pos元素的位置,返回下一個元素的位置。

c.clear()移除所有元素,清空容器。

c.resize(num)  將元素數量改爲num(增加函數用defalut構造函數的產生,多餘元素被刪除。

c.resize(num,e) 將元素數量改爲num(增加元素是e的副本)

三丶心得

在我看來,運算符重載是很重要的,很有實用意義,豐富了類的功能和適用範圍,重載時一般都是基於原來的功能進行延伸不能太違背原來的意思,重載一次一勞永逸,爲下面節省很多,而且使程序更清晰。
STL 使是以模板爲基礎的一個標準庫,使c++的重要的一部分。它非常有實用性,運用STL能使代碼更簡潔。我們要對STL各種容器及其特有的一些功能都要了解,用的時候也便於查找。
但是,STL聽大佬說在編寫時很方便,實際運用上我並不能很好掌握,甚至說不怎麼會用容器。這方面還需要多去理解和練習。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章