資料結構 描述
實現標頭檔案 向量
(vector)
連續儲存的元素
列表(list)
由節點組成的雙向鍊錶,每個結點包含著乙個元素
雙佇列(deque)
連續儲存的指向不同元素的指標所組成的陣列
集合(set)
由節點組成的紅黑樹,每個節點都包含著乙個元素,節點之間以某種作用於元素對的謂詞排列,沒有兩個不同的元素能夠擁有相同的次序
多重集合
(multiset)
允許存在兩個次序相等的元素的集合
棧(stack)
後進先出的值的排列
佇列(queue)
先進先出的執的排列
優先佇列
(priority_queue)
元素的次序是由作用於所儲存的值對上的某種謂詞決定的的一種佇列
對映(map) 由
對組成的集合,以某種作用於鍵對上的謂詞排列
多重對映
(multimap)
允許鍵對有相等的次序的對映
標準庫vector型別使用需要的標頭檔案:#include 。
vector 是乙個類模板,不是一種資料型別,vector是一種資料型別。
vector的儲存空間是連續的,list不是連續儲存的。
vector< typename > v1; //預設v1為空,故下面的賦值是錯誤的v1[0]=5;
vectorv2(v1); 或v2=v1;或vectorv2(v1.begin(), v1.end());//v2是v1的乙個副本,若v1.size()>v2.size()則賦值後v2.size()被擴充為v1.size()。
vector< typename > v3(n,i);//v3包含n個值為i的typename型別元素
vector< typename > v4(n); //v4含有n個值為0的元素
vectorv5(a,a+5);//其中int a[4]=; v5的size為5,v5被初始化為a的5個值。後乙個指標要指向將被拷貝的末元素的下一位置。
vectorv6(v5);//v6是v5的拷貝
1. v.push_back(t) 在容器的最後新增乙個值為t的資料,容器的size變大。
2. v.size() 返回容器中資料的個數,size返回相應vector類定義的size_type的值。
3. v.empty() 判斷vector是否為空
4. v[n] 返回v中位置為n的元素
5. v.insert(pointer,n,content) 向v中pointer指向的位置插入n個content的內容。
v.insert(pointer,a[2],a[4]) 將a[2]到a[4]三個元素插入。
6. v.pop_back() 刪除容器的末元素,並不返回該元素。
7. v.erase(pointer1,pointer2) 刪除pointer1到pointer2中間(包括pointer1所指)的元素。
vector中刪除乙個元素後,此位置以後的元素都需要往前移動乙個位置,雖然當前迭代器位置沒有自動加1,但是由於後續元素的順次前移,也就相當於迭代器的自動指向下乙個位置一樣。
8. v1==v2 判斷v1與v2是否相等。
9. !=、<、<=、>、>= 保持這些操作符慣有含義。
10. vector::iterator p=v1.begin( ); p初始值指向v1的第乙個元素。*p取所指向元素的值。
p=v1.end( ); p指向v1的最後乙個元素的下一位置。
12. v.clear() 刪除容器中的所有元素。12.v.clear() 刪除容器中的所有元素。
13. v.resize(2*v.size)或
v.resize(2*v.size, 99) 將v的容量翻倍(並把新元素的值初始化為99)
#include "stdafx.h"
#include #include #include using namespace std;
void init_vector(vector&vec,int num);
void print_vector(vector&vec);
void insert_array_to_vector(vector&vec,int a,int len);
int _tmain(int argc, _tchar* argv)
; cout//初始化
insert_array_to_vector(vec,a,sizeof(a)/sizeof(int));
//查詢
vector::iterator found;
found = find(vec.begin(),vec.end(),6);
if ( found != vec.end() )
cout << "search_value found!"<<*found<<"\n";
else
cout << "search_value not found!\n";
//逆置
reverse(vec.begin(),vec.end());
//排序
sort(vec.begin(),vec.end());
//列印
print_vector(vec);
cin>>pause;
return 0;
}void init_vector(vector&vec,int num)
cout<&vec,int a,int len)
s.push(x)入棧。
s.pop() 出棧。注意,出棧操作只是刪除棧頂元素,並不返回該元素。
s.top() 訪問棧頂
s.empty()判斷棧空
s.size() 棧大小
stackintstack;
for(int i=0;i<10;i++)
cout<
q.push(x)入隊,將x接到佇列的末端。
q.pop() 出隊,彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。
q.front() 訪問隊首元素。
q.back() 訪問隊尾元素。
q.empty()判斷佇列空。
q.size() 訪問佇列中的元素個數。
deque
dequeintdeque;
for(int i =0;i<10;i++)
while(!intdeque.empty())
while(!intqueue.empty());
mycomplex::mycomplex():real(0),imag(0)
mycomplex::mycomplex(int real,int imag):real(real),imag(imag)
mycomplex::~mycomplex()
mycomplex::mycomplex(const mycomplex& other)
mycomplex& mycomplex::operator=(const mycomplex& other)
mycomplex mycomplex::operator+(const mycomplex& other)
mycomplex mycomplex::operator+=(const mycomplex& other)
bool mycomplex::operator==(const mycomplex& other)
bool mycomplex::operator!=(const mycomplex& other)
std::ostream& operator<<(std::ostream & os,const mycomplex & com)
std::cout << com.imag << "i";
return os;
} std::istream& operator>>(std::istream & is,mycomplex & com)
else
}else
return is;
}void mycomplex::setreal(int real)
void mycomplex::setimag(int imag)
void mycomplex::setval(int real,int imag)
inline int mycomplex::getreal() const
inline int mycomplex::getimag() const
int _tmain(int argc, _tchar* argv)
{ mycomplex c1(1,2);
cout<<"c1:"<>c1;
cin>>c2;
cout<
c 標準模板庫的使用
1.priority queue priority queue,greater q 小根堆,即對頭元素最小 priority queue 預設情況,大根堆,即隊頭元素最大。後續更新 2.deque 雙端佇列 介面類似vector 單向插入刪除 c.pop back 彈出最後乙個元素 c.push b...
C 標準模板庫
map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值 的資料處理能力。資料的插入 includemapstudent strdent.insert pair 1,xiaoming strdent.insert pair 2...
C 標準模板庫(STL) set的使用
1.定義 翻譯為集合,內部遞增有序,並且不包含重複的元素的容器 使用set之前需要新增標頭檔案 include在加上using namespace std setname 其他的寫法規則跟vector相同,其實c 的容器定義都很類似 2.set的訪問 只能通過迭代器訪問 set iterator i...