1. 程式人生 > >STL中常用函式

STL中常用函式

STL容器Stack

標頭檔案寫:#include<stack>

定義: stack <TYPE> StackName;

成員函式:

成員函式功能
bool empty()棧為空返回true,否則返回false
void pop()刪除棧頂元素,即出棧
void push(const TYPE &val)將新元素val進棧,使其成為棧頂元素
TYPE &top()檢視當前棧頂元素
size_type size()返回堆疊中的元素數目

程式:

#include <iostream>
#include <stack>
using namespace std;
int main()
{
	stack <int> Stack1; 
	Stack1.push(3);//進棧
	Stack1.push(6); 
	Stack1.pop();//出棧,相當於刪除棧頂元素 
	cout<<"當前棧頂元素:"<<Stack1.top()<<endl;
	cout<<"判斷是否為空"<<Stack1.empty()<<endl;
	cout<<"輸出棧中元素數目:"<<Stack1.size();
} 

STL容器vector

標頭檔案寫:#include<vector>

vector的建構函式和解構函式:

成員函式功能
vector<TYPE>c產生一個空vector沒有任何元素
vector<TYPE>c1(c2)產生另一個同型的vector副本(所有元素被複制)
vector<TYPE>c(n)生成一個大小為n的vector
vector<TYPE>c(n,elem)生成一個大小為n的vector,每個元素值為elem
c.~vector<TYPE>()銷燬所有元素,並釋放記憶體

vector的幾種重要的操作:

size( )     //返回當前的元素數量

empty( )        //判斷是否為空

VectorName[n];  //返回VectorName中位置為n 的值

v1=v2                //把v1元素的值替換為v2元素的副本;

v1==v2            //判斷v1與v2是否相等

!=、<、<=、>、>=;//保持這些操作符慣有含義

vector的成員函式:

程式:

#include<iostream> 
#include <vector>
using namespace std;
int main()
{
	vector<int>c;
	vector<int>c1;
	c.assign(3,2);//將3個2賦值給c 
   c1.assign(1,3);//從1~3選一個數字給C1 
	c.push_back(4);c1.push_back(4);
	c.push_back(5);c1.push_back(5);
	cout<<"輸出c中的元素個數:"<<c.size()<<endl;//結果為5
	if(c==c1) cout<<"c與c1相等";
	else cout<<"c與c1不相等";//結果不相等 
	return 0; 
} 

STL容器Queue以及優先佇列priority_queue

C++ Queues(佇列)

C++佇列是一種容器介面卡,它給予程式設計師一種先進先出(FIFO)的資料結構。

pop()刪除第一個元素
在末尾加入一個元素
返回佇列中元素的個數

C++ Priority Queues(優先佇列)

C++優先佇列類似佇列,但是在這個資料結構中的元素按照一定的斷言排列有序。

如果優先佇列為空,則返回真
pop()刪除第一個元素
返回優先佇列中擁有的元素的個數
top()返回優先佇列中有最高優先順序的元素
#include <bits/stdc++.h>
using namespace std;
int main(){
	priority_queue<int>q;int x;//正序的方法(大的數字放在棧頂)
	for(int i=0;i<6;i++)
	   {cin>>x;
	    q.push(x);
	   }
	while(!q.empty()){
		cout<<q.top()<<' ';
		q.pop();
	}
	 
  return 0;
}

結果截圖:

#include <bits/stdc++.h>
using namespace std;
int main(){//倒序的方法,小的數字放在隊頂
	priority_queue<int,vector<int>,greater<int> >q;int x;//注意greater<int>後一定要加空格
	for(int i=0;i<6;i++)
	   {cin>>x;
	    q.push(x);
	   }
	while(!q.empty()){
		cout<<q.top()<<' ';
		q.pop();
	}
	 
  return 0;
}

結果截圖:

STL容器set

C++ Sets
集合(Set)是一種包含已排序物件的關聯容器

返回指向第一個元素的迭代器

如果集合為空,返回true

end()

返回指向最後一個元素的迭代器

返回集合中與給定值相等的上下限的兩個迭代器

返回一個指向被查詢到元素的迭代器

返回指向大於(或等於)某值的第一個元素的迭代器

返回一個用於元素間值比較的函式

返回集合能容納的元素的最大限值

返回指向集合中最後一個元素的反向迭代器

返回指向集合中第一個元素的反向迭代器

目前我認為用到set最經典的一道題是我的部落格上那道--》列車排程       用set最簡潔

不知道為什麼居然自動給排序了!!!

#include <bits/stdc++.h>
using namespace std;
  int main ()
{
  int myints[] = {75,99,65,42,13};
  set<int> myset (myints,myints+5);

  cout << "myset contains:";
  for (set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)//注意iterator和reverse_iterator的區別,下邊有例子
    cout << ' ' << *it;

  cout <<endl;

  return 0;
}

結果截圖:


還可以從大到小輸出哪

int main ()
{
  int myints[] = {21,64,17,78,49};
  std::set<int> myset (myints,myints+5);

  std::set<int>::reverse_iterator rit;

  std::cout << "myset contains:";
  for (rit=myset.rbegin(); rit != myset.rend(); ++rit)
    std::cout << ' ' << *rit;

  std::cout << '\n';

  return 0;
}

//輸出結果為 78 64 49 21 17

STL容器Map

//最牛的功能是自動刪除重複的元素,並且按第一個key 給排好序了

#include <bits/stdc++.h>
using namespace std;
int main(){
	map<string,int>m;
	map<string,int>::iterator it;
	int n;
	scanf("%d",&n);
	string s;int x;
	for(int i=0;i<n;i++){
		cin>>x>>s;
		m.insert( pair<string,int>(s,x) );
	}
    m.erase("Tom");//只能根據key來刪除元素,及第一個元素 
    it=m.begin();
    while(it!=m.end()){
    	cout<<it->first<<" "<<it->second<<endl;
    	it++;
    }
	return 0;
}