c++ STL简单入门(涉及:sort vector stack queue map set)

涉及到一些简单的操作

主要内容有:

sort
vector
stack
queue
map
set

# include <iostream>
# include <algorithm>
# include <vector>
# include <stack>
# include <queue> 
# include <deque> 
# include <map>
# include <unordered_map>
# include <set>
# include <unordered_set>
using namespace std; 

bool cmp (pair<int,int>a, pair<int,int>b){
    
      // 自定义比较器
 	return a.first>b.first; 
 } 

int main(){
    
    
	//数组排序函数 sort 
	cout<<"**sort**\n\n";
	int a[] = {
    
    1,2,4,5,63,11,29,14};
	sort(a,a+8);  // sort 使用了algorithm  
	//sort第一个参数 代表排序的其实位置  第二个参数代表最后一个位置的下一个位置 第三个参数可以是一个比较器 
	for (int i=0;i<8;i++){
    
    
		cout<<a[i]<<" ";
	}
	cout<<endl;
	
	//string
	cout<<"\n**string**\n\n" ;
	/*c中字符串只能用char类型数组,c++ stl可以使用string*/
	string str = "sadasf";
	cout<<str<<endl;
	/*string获取一行字符串 --- getline (c中的scanf遇到空格或换行结束)*/
//	string str1;
//	getline(cin,str1);
//	cout<<str1<<end;
	
	/*string 重载了运算符*/
	string str2;
	str2 += "hello";
	str2 += " world";
	cout<<str2<<endl; 
	
	/*对string中的数字排序*/
	cout<<"对sring排序\n"; 
	string str3 = "38291294";  // 对字符也可 
	sort(str3.begin(),str3.end());  // .end()指向的是最后一个元素位置的下一个位置
	cout<<str3<<endl;  // sort对str3本身进行了修改排序 
	 
	/*erase函数 删除元素*/
	cout<<"erase() 删除\n";
	str3.erase(--str3.end());  // 删除最后一个元素 
	cout<<str3<<endl;
	
	/*substr() 切片*/
	cout<<"切片\n";
	string s = str3.substr(1,5);  // 从索引为 1 开始,取5个数 
	cout<<s<<endl;
	s = str3.substr(1,-1);  // 从索引为1开始,取到最后 
	cout<<s<<endl; 
	
	/*循环 for  或者 迭代器 iterator*/
	cout<<"循环\n";
	// 法1 
	for (string::iterator it=str3.begin();it!=str3.end();it++)
		cout<<*it;
	cout<<endl;
	// 法2   auto 自动获取类型 
	for (auto x:str3)  // x 取str3中每个值 
		cout<<x;
	cout<<endl;
	// 法3
	for (auto it=str3.begin();it!=str3.end();it++){
    
    
		cout<<*it;
	} 
	cout<<endl;
	
	// vector  可以看成数组 
	cout<<"\n**vector**\n\n";
	
	/*定义*/
	cout<<"定义\n";
	vector<int> v;  // 此时为空  什么也不输出 
	for (auto x:v) cout<<x; cout<<endl;
	vector<int> v2(4);  // 定义一个大小为4的vector,初始为0 
	for (auto x:v2) cout<<x; cout<<endl; 
	vector<int> v3(4,1);  // 定义一个大小为4的vector,初始为1
	for (auto x:v3) cout<<x; cout<<endl; 
	vector<int> v4={
    
    1,3,4,2,3,6,5,6};  // 定义一个大小为4的vector,初始为1
	for (auto x:v4) cout<<x; cout<<endl; 
	
	/*push_back 从后追加数据*/
	cout<<"push_back:\n";
	v.push_back(3);
	v.push_back(3);
	for (auto x:v) cout<<x; cout<<endl;
	
	/*erase删除元素 复杂度为O(n)*/
	cout<<"erase()删除元素\n";  //删除后要对后面的元素前移 
	v.erase(v.begin());  // 删最后一个元素为--v.end() 
	for (auto x:v) cout<<x; cout<<endl; 
	
	/*size获取大小 v.size()*/
	cout<<"size获取大小\n";
	cout<<v.size()<<endl;
	
	/*排序*/
	cout<<"排序\n"; 
	vector<int> v1 = {
    
    12,3,1,3,42,3,25,4};
	sort(v1.begin(),v1.end());  // 从小到大   默认为 less<>() 
	for(auto x:v1) cout<<x<<" "; cout<<endl; 
	sort(v1.begin(),v1.end(),greater<int>());  // 从大到小 
	for(auto x:v1) cout<<x<<" "; cout<<endl;  
	
	/*输入*/
//	cout<<"vector输入\n"; 
//	vector<int> v5;
//	int aa;
//	for (int i=0;i<3;i++){
    
    
//		cin>>aa;
//		v5.push_back(aa);
//	}
//	for (auto x:v5) cout<<x<<" "; cout<<endl;
	
	// stack  栈
	cout<<"\n**stack**\n\n";
	stack<int> st;   
	/*push*/
	st.push(2);
	st.push(3);
	
	/*top()*/
	cout<<"取数top\n";
	cout<<st.top()<<endl;
	
	/*pop() 出栈 没有返回值*/
	st.pop();
	
	/*size查看数量*/
	cout<<"查看数量\n";
	cout<<st.size()<<endl; 

	// queue  push front pop size  从后往前插入队列  front返回前面的值 

	// deque  push_back push_front pop_back pop_front

	// map 映射  底层: 有序的树状结构 
	cout<<"\n**map**\n\n";
	map<int,int> m;
	m[6] = 3;
	m[5] = 8;
	m[4] = 9;
	for(auto it=m.begin();it!=m.end();it++)  // begin()返回是指针,所以输出用 -> 
		cout<<it->first<<" "<<it->second<<endl;  // first 第一个值 seco第二个值 
	
	/*自定义排序  map 不可排序 所以需要转化成vector*/
	cout<<"map自定义排序\n"<<endl; 
	vector<pair<int,int>> vm(m.begin(),m.end());  // 把map转化成vector 
	sort(vm.begin(),vm.end(),cmp);
	for (auto x:vm) cout<<x.first<<" "<<x.second<<endl;
	cout<<endl;
	
	// unordered_map  底层:无序的hash结构  快 
	cout<<"unordered_map\n";
	unordered_map<int,int> um;
	um[6] = 3;
	um[7] = 9;
	um[5] = 8;
	um[4] = 9;
	for(auto it=um.begin();it!=um.end();it++)  // begin()返回是指针,所以输出用 -> 
		cout<<it->first<<" "<<it->second<<endl;  // first 第一个值 seco第二个值 

	// set 集合  会去掉重复元素 并 排序  底层:树状有序结构 
	cout<<"\n**set**\n\n";
	set<int> se;
	/*插入*/
	se.insert(5); 
	se.insert(3); 
	se.insert(3); 
	se.insert(4); 
	cout<<"大小为: "<<se.size()<<endl;
	for (auto x:se) cout<<x<<" ";
	cout<<endl; 
	
	// unordered_set  无序 

运行结果

**sort**

1 2 4 5 11 14 29 63

**string**

sadasf
hello world
对sring排序
12234899
erase() 删除
1223489
切片
22348
223489
循环
1223489
1223489
1223489

**vector**

定义

0000
1111
13423656
push_back:
33
erase()删除元素
3
size获取大小
1
排序
1 3 3 3 4 12 25 42
42 25 12 4 3 3 3 1

**stack**

取数top
3
查看数量
1

**map**

4 9
5 8
6 3
map自定义排序

6 3
5 8
4 9

unordered_map
4 9
5 8
7 9
6 3

**set**

大小为: 3
3 4 5

写auto出现问题时

用Dev-C++并不能使用C++11的新特性,gcc4.8以后的版本都是支持c++11新特性的,只是需要在编译的时候设置-std的参数

我们需要给编译器增加一个std参数:

  • 使用gcc 1.cpp -std=c++11 这样就能让编译器使用c++11的新特性了。
    在dev-c++中使用新特性是一样的道理,在他启动编译器来编译代码的时候我们让他加上这个参数就行了
  • 设置方法是:在Tools里面找到Compiler Options打开它,然后把那个Add the following commands when calling compiler:选上勾,在里面加入-std=c++11就可以了

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43779658/article/details/108955838
今日推荐