c++ stl1

 目录

vector

 queue、pirority_queue

 stack

 deque


vector

头文件:
# include<vector>

vector的声明:

vector<int> a ; // 相当于声明了一个变长的数组 
a = {1,2,3,4,5} ;
vector<int> b[10] ; // 相当于声明了一个二维数组,二维数组的第二个维度的大小是动态的 

vector的一些操作:

1. .size()和.empty()

两个几乎所有的stl容器都具有的方法,.size()是返回容器的大小,.empty()是返回容器是否为空

2. .clear()

清空vector

3. .begin()和.end()

补充:迭代器,用的少, vector<int>::iterator it ; 可以当成指针来理解,前面加"*"号来取元素值

.begin()返回vector第一个元素的迭代器,.end()返回最后元素的后一个位置的迭代器

迭代器可以进行运算(像指针用于 it++、-- it等),迭代器用的很少

迭代器可以用于遍历,但是大都是用下面的第二种方法进行vector遍历

// 迭代器用的非常少,下面这种遍历方法也是很少用 
for(vector<int>::iterator it = a.begin() ; it != a.end() ; it ++) cout << *it << " " ;
// 一般都用下面这个方法来遍历vector 
for(int i = 0 ; i < a.size() ; i ++) cout << a[i] << " "  ; 

4. .front()和.back()

.front 返回第一个元素相当于a[0]、*a.begin()

.back 返回最后一个元素,相当于a[a.size() - 1] 、*--a.end()

5. .push_back() 和.pop_back()

.push_back(x) 从后面加入一个元素x

.pop_back将最后一个元素删除  

自己敲一遍试试:
 

# include<iostream>
# include<vector>

using namespace std ;

int main()
{
	vector<int> a ; // 相当于声明了一个变长的数组 
	a = {1,2,3,4,5} ;
	vector<int> b[10] ; // 相当于声明了一个二维数组,二维数组的第二个维度的大小是动态的 
	// .size .empty 两个几乎所有的stl容器都具有这个方法
	cout << "a.size: "<< a.size() << endl ;
	cout << "a.empty: " << a.empty() << endl ;  
	// .clear
	// 迭代器,用的少 vector<int>::iterator it ; 可以当成指针来理解,前面加"*"号来取元素值 
	// .begin 返回vector中第一个元素的迭代器 .end 返回最后一个元素的后一个位置 
	// .front 返回第一个元素相当于a[0]、*a.begin() 
	// .back  返回最后一个元素,相当于a[a.size() - 1] 、*--a.end() 
	// 迭代器用的非常少,下面这种遍历方法也是很少用 
	for(vector<int>::iterator it = a.begin() ; it != a.end() ; it ++) cout << *it << " " ;
	// 一般都用下面这个方法来遍历vector 
	for(int i = 0 ; i < a.size() ; i ++) cout << a[i] << " "  ; 
	cout << endl ; 
	a.clear() ;
	cout << "clear之后的vector<int> a:" ; 
	for(int i = 0 ; i < a.size() ; i ++) cout << a[i] << " "  ;
	// .push_back(x) 从后面加入一个元素x,.pop_back将最后一个元素删除  
	
	return 0 ;
}

 queue、pirority_queue

队列都是先进先出的

头文件:
# include<queue>

这个库里面包括两个:queue(循环队列)、priority_queue(优先级队列)

声明:

queue<int> q;
queue<double> p ;

priority_queue<int> a ; // 优先级队列,也是一个大顶堆(也称大根堆)
priority_queue<int, vector<int>, greater<int>> q;    // 小根堆

操作:
1.没有clear!

stl容器中,只有queue、priority_queue、stack没有clear,其他都有

想要清空一个队列直接从重新初始化一下即可:

q = queue<int>() ;

2. .push() .pop()

.push(x) 将x从队尾入队

.pop()将队头元素出队

3.queue的 .front() 和 .back()

.front()返回队头元素

.back()返回队尾元素

4. priority_queue 的 .top()

.top()返回堆顶元素

 

自己敲一遍试试:

# include<iostream>
# include<queue>

using namespace std ;

int main()
{
	// 声明 
	queue<int> q ;
	// 入队 
	q.push(1) ;
	q.push(2) ; 
	q.push(3) ;
	q.push(4) ;
	// .front()返回队头元素 .back()返回队尾元素 
	cout << "队头:" << q.front() << endl ;
	cout << "队尾:" << q.back() << endl ;
	// 出队 
	q.pop() ;
	cout << "pop后:" << endl ; 
	cout << "队头" << q.front() << endl ;
	cout << "队尾" << q.back() << endl ;
	
	priority_queue<int> p ;
	p.push(1) ;
	p.push(5) ;
	p.push(2) ;
	cout << "p.top():" << p.top() << endl ;
	
	return 0 ;
}

 

 stack

栈都是先进后出的

头文件:

# include<stack>

声明:
 

stack<int> stk ;

操作:

1. .push(x) 将元素x入栈

2. .pop() 将栈顶元素出栈

3. .top() 取栈顶元素的值

试一试:

# include<iostream>
# include<stack>

using namespace std ;

int main()
{
	stack<int> stk ;
	stk.push(1) ;
	stk.push(2) ;
	cout << stk.top() << endl ;
	stk.pop() ;
	cout << stk.top() << endl ;
	return 0 ;
}

 deque

双端队列,在两端都可进行入队出队

可以像数组一样直接取下标 []随机取

头文件:
# include<deque>

操作:

1.  []可以随机访问

2. .begin() 和 .end()返回头尾迭代器

3. .push_back(x)、.push_front(x)和.pop_back()、.pop_front()

4. .clear()清空 

posted @ 2022-03-15 19:30  r涤生  阅读(35)  评论(0编辑  收藏  举报