解決stl編譯警告的方法,在標頭檔案的include**前加上:#pragma warning (disable : 4786)
注:disable 後邊是警告代號。
一串行1)
vector模板類(標頭檔案為vector,老版本為vector.h)
陣列的一種類表示,可反轉容器,rbegin()和rend()分別指向反轉序列的第乙個和超尾疊待器,型別為reverse_iterator。
1. 使用方法
vector屬於std命名域的,因此需要通過命名限定,如下完成你的**:
using std::vector;
vectorvec;
或者連在一起,使用全名:
std::vectorvints;
2.
vector的主要方法:
1) 向vector新增乙個資料
vector新增資料的預設方法是push_back()。push_back()函式表示將資料新增到vector的尾部,並按需要來分配記憶體。
2) 訪問vector中的資料
使用兩種方法來訪問vector。
1、vector::at()
2、vector::operator
operator主要是為了與c語言進行相容。它可以像c語言陣列一樣操作。但at()是我們的首選,因為at()進行了邊界檢查,如果訪問超過了vector的範圍,將丟擲乙個例外。由於operator容易造成一些錯誤,所有我們很少用它,下面進行驗證一下:』
vectorv;
v.reserve(10);
for(int i=0; i<7; i++)
v.push_back(i);
try
catch(const exception& e)
3) 刪除vector中的資料
vector能夠非常容易地新增資料,也能很方便地取出資料,同樣vector提供了erase(),pop_back(),clear()來刪除資料,當你刪除資料的時候,你應該知道要刪除尾部的資料,或者是刪除所有資料,還是個別的資料。在考慮刪除等操作之前讓我們靜下來考慮一下在stl中的一些應用。
5.對向量可執行的其他操作(非成員函式)
1.or_each(iterator1,iterator2,function_name);//對向量區間[iterator1,iterator2)中的每個元素執行函式function_name.
2.random_shuffle(itr1,itr2);//隨即排列向量區間[iterator1,iterator2)中的元素。要求容器支援隨即訪問。
3. 對於基本型別,使用sort(itr1,itr2).對向量區間[iterator1,iterator2)排序(公升序)。
對於使用者定義的物件(如結構體),需要定義能夠處理該型別物件的成員或非成員函式,再使用上述函式。
如果想按別的資料域排序,則可用sort(itr1,itr2,function_name);//function_name的返回值必須能轉換成bool型別。
c++將operator++()作為過載++字首版本,operator++(int)作為字尾版本(其中引數永遠都不會用到)。
2)deque(標頭檔案queue,是乙個介面卡類)
deque 和vector一樣都是標準模板庫中的內容,deque 是雙端佇列,在介面上和vector 非常相似,在許多操作的地方可以直接替換。vector在預設情況下是典型的使用序列的方法,對於deque,當使用插入刪除操作的時候是乙個更好的選擇。
1. 細讀上面兩張**,你會發現和vector比較這裡增加了兩個函式。
push_front(elem) —— 在頭部插入乙個資料。
pop_front() —— 刪除頭部資料。
相對於vector 缺少了兩個函式
capacity() —— 返回vector當前的容量。
reserve() —— 給指定大小的vector 分配空間。
deque是大塊大塊地分配記憶體,每次插入固定數量的資料。vector是就近分配記憶體。
2. 當執行大資料量的呼叫push_back()的時候,記住要呼叫vector::reserve()。
deque分配的空間是預先分配好的,deque維持乙個固定增長率,在vector實驗中我們考慮到應該呼叫vecor::reserve()
.然後在下面這個例子驗證了我們的假設,在使用vector的時候呼叫reserve()能夠膀子我們預先分配空間,這將是vector乙個預設選擇的操作。
3. 當你分配很多記憶體單元的時候,記住使用deque**記憶體要比vector消耗時間多。
在實驗三中我們**了vector和deque在**非鄰接記憶體塊上的不同,分別證明了vector在分配記憶體的時候是線性增長,而deque是指數增長,同樣,vector要**的記憶體比deque多的多,如果你迴圈呼叫了push_back(),那麼deque將獲取大量的記憶體,而且是臨近的。我們通過測試發現在分配記憶體單元消耗的時間和vector的時間接近。
4. 如果你計畫使用insert(),或者需要pop_front(),那就使用deque。
5. 對於訪問資料,vector::at()效率最高。
3) list(標頭檔案list,雙向鍊錶,可反轉容器)
在任一位置的插入和刪除的時間都是固定的,不能隨記訪問。
與失量迭代器不一樣,從容器中插入和刪除元素後,迭代器所指向的元素不變。
常用成員函式:
函式說明
void merge&x>
將都已經排序的鍊錶x合併到呼叫鍊錶中,並且排序,x為空。時間複雜度為線性時間。
void remove(const t & val)
從鍊錶中刪除val的所有例項。線性時間。
void sort()
使用《操作符對列表排序。時間複雜度為:nlogn
void splice(iterator pos, listx)
將鍊錶x的內容插入到pos的前面,x將為空。固定時間。
void unique()
將連續相同的元素壓縮為單個元素。線性時間。
說明: splice()
方法執行後,迭代其仍然有效。unique()只能將相鄰的相同值壓縮為單個值。若想每個值佔乙個位置,應先sort()後再呼叫unique().
非成員函式,要求隨即訪問迭代器,所以不能用於鍊錶中。
4) queue(標頭檔案queue,是乙個介面卡類)
操作:方法
說明bool empty() const
隊列為空,返回true,否則返回false
size_type size() const
返回佇列中元素的數目
t& front()
返回指向隊首元素的引用
t& back()
返回指向隊尾元素的引用
void push(const t& x)
在隊尾插入x
void pop()
刪除隊首元素
5) priority_queue(標頭檔案queue,預設的底層類是vector)
最大的元素被移到隊首。
使用方法:priority_queuepq1 priority_queue(>)
greater<>()是乙個欲定義的函式物件,確定哪個元素放到隊首的比較方式。
6) stack(標頭檔案stack,底層類vector,是乙個介面卡類)
基本操作:
方法說明
bool empty() const
如果堆疊為空,則返回true;否則返回false
size_type size() const
返回堆疊中的元素數目
t& top()
返回指向棧頂元素的引用
void pop()
刪除棧頂元素
void push(const t& x)
在堆疊頂部插入x
續:stl容器(2)
STL 容器總結(一)
一 所有容器的共通操作 1 equality 和 inequality 運算子,返回 true 或者 false。2 assignment 運算子,將某個容器複製給另乙個容器。3 empty 會在容器沒有任何元素的時候返回 true,否則 false。4 size 返回目前容器中持有元素的數目。5 ...
STL 淺入 容器 (一)
stl裡的容器按元素在容器內的排序方式,分序列式和關聯式。c 中的array就是乙個序列式容器,其中的元素集合呈線性關係。stl中的序列式容器 等。其中stack和queue在技術上稱之為介面卡,即內部機制採用其他容器實現。1.vector 特徵 類似陣列,但可以空間大小自動隨元素的數量改變。vec...
stl一些容器
deque a deque deque n,elem n個elem初始化的deque deque beg,end 雙指標初始化 v.push front 取出第乙個元素 棧,先進後出。通過top 方法返回棧頂元素,push 壓棧,pop 出棧。效率很高,不能遍歷,不支援隨機訪問。q.front q....