C++ STL用法学习

一、sort排序

//STL学习 
//sort排序
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
	int a[] = {2, 10, 4, 3, 1, 5, 9};
	sort(a, a + 7);
	for (int i = 0; i < 7; i++)
	{
		cout << a[i] << " ";
	}  
	return 0 ; 
}

在这里插入图片描述

二、字符串string

1.简单使用

1.简单使用 
//c语言
#include <iostream>

using namespace std;

int main()
{
	char *ch = "abcdff";
	for (int i = 0; ch[i] != '\0'; i++)cout << *(ch + i);
	return 0 ; 
}
//c++语言
#include <iostream>

using namespace std;

int main()
{
	string s = "abcdff";
	cout << s <<endl;
	return 0;
}

在这里插入图片描述

2.获取一行数据例如hello world

2.获取一行字符串,比如获取hello world 
#include <iostream>

using namespace std;

int main()
{
	char ch[103];
	scanf("%s", ch);//只能获取hello 
	printf("%s", ch);
	return 0;
 } 

 
#include <iostream>

using namespace std;

int main()
{
	string s;
	getline(cin, s);//获取一行数据 
	cout << s;
	return 0;
}

在这里插入图片描述

在这里插入图片描述

3.+=运算符

3.+=运算符
#include <iostream>

using namespace std;

int main()
{
	string s;
	s += "hello";
	s += " world";
	s += "5";
	s += 10;//换行了,因为10对应ASCII是换行
	
	int a = 5;
	s += (a + '0'); //加了个5; 
	cout << s;
	return 0; 
}

在这里插入图片描述

4.字符串相关排序

4.排序,使用algorithm里面的sort 
#include <iostream>
#include <algorithm>
 
using namespace std;

int main()
{
	string s = "5418769";
	cout << *s.begin();
	sort(s.begin(), s.end());//传入了头迭代器和尾迭代器 
	cout << s;
	return 0; 
}

在这里插入图片描述

5.erase函数

//5.erase函数 
#include <iostream>
#include <algorithm>
 
using namespace std;

int main()
{
	string s = "5418769";
    s.erase(s.begin());//去掉第一个 
	s.erase(-- s.end());//去掉第二个 
	cout << s;
	return 0; 
}

在这里插入图片描述

6.substr函数

//6.substr函数比如取5418769中的418
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200111165832675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbmdmdXNoaW5pemlqaQ==,size_16,color_FFFFFF,t_70)#include <iostream>
#include <algorithm>
 
using namespace std;

int main()
{
	string s = "5418769";
	s = s.substr(1, 3);//从第一个取,取3个;第一个参数是索引,第二个是取几个 
	s = s.substr(1, -1);// 索引为1截断到最后 
	cout << s;
	return 0; 
}

在这里插入图片描述

7.循环方式for循环 +auto

//7.循环方式for循环 
#include <iostream>
#include <algorithm>
 
using namespace std;

int main()
{
	string s = "5418769";
	//方式1 
	for (int  i = 0; i < s.length(); i++) cout << s[i] << endl;
	//方式2 
	//for (string::iterator it = s.begin(); it != s.end(); it++) cout << *it; 
	//for (auto it = s.begin(); it != s.end(); it ++) cout << *it;//嫌麻烦可以这么写 
	//for (auto x : s) cout << x;
	return 0; 
}

在这里插入图片描述

三、vector用法

1.定义和构造

vector相当于数组,模板类型相当于存放的内容

//vector相当于数组,模板类型相当于存放的内容 
//定义和构造

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    int n[] = {1,2,3,4,5};
	vector<int> v;//定义一个空vector 
	vector<int> v2(4);//定义一个4个大小的vector,初始为0
	vector<int> v3(4, 6);//定义一个4个大小的vector,初始为6
	vector<int> v4(n, n + 5);//定义一个vector,数字为12345 
	for (int i = 0; i < v.size(); i++) cout <<v[i] << " ";
	cout << endl;
	for (int i = 0; i < v2.size(); i++) cout <<v2[i] << " "; 
	cout << endl;
	for (int i = 0; i < v3.size(); i++) cout <<v3[i] << " ";
	cout << endl;
	for (int i = 0; i < v4.size(); i++) cout <<v4[i] << " ";
	return 0;
}

在这里插入图片描述

2.用at或者[]获取元素

//用at或者[]获取元素 
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
	int n[]= {1,2,3,4,5};
	vector<int> v(n, n + 5);
	cout << v[1] << endl;//取索引为1的 
	cout << v.at(2);//取索引为2的 
	return 0;
}

在这里插入图片描述

3.方法

1.push_back追加内容
2.resize进行重置大小,不赋值默认为0
3.erase删除元素,复杂度为O(N)
4.获取第一个元素
5.获取最后一个元素

//方法
//push_back追加内容 
//resize进行重置大小,不赋值默认为0 
//erase删除元素,复杂度为O(N) 
//front获取第一个元素 
//back获取最后一个元素 
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(6);
	v.resize(10);//后面补0 
	v.erase(v.begin());
	v.erase(-- v.end());
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] ;
	}
	cout << endl;
	//取第一个
	cout << v[0];
	cout << *v.begin(); 
	cout << v.front();
	
	cout << endl;
	//取最后一个 
	cout << v.back();
	cout << v[v.size() - 1];
	cout << * --v.end();
	return 0;
} 

在这里插入图片描述

4.排序算法

//排序算法
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>  

using namespace std;

int main()
{
	int a[] = {5,1,2,4,0,-1}; 
    vector<int> v(a, a + 6); 
    //从小到大排序,默认不写是less<int> 
    sort(v.begin(), v.end());
    for(int i = 0; i < v.size(); i++)
    {
    	cout << v[i] << " ";
	}
	cout << endl;
	sort(v.begin(), v.end(), greater<int>());//从大到小排序 
    for(int i = 0; i < v.size(); i++)
    {
    	cout << v[i] << " ";
	}
	return 0;
}

在这里插入图片描述

5.输出

1.for循环
2.迭代器循环

//输出
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
	int a[] = {4,3,6,8,7,9};
	vector<int> v(a, a + 6);
	//for循环 
	for (int i = 0; i < v.size();i ++) cout << v[i] << " ";
	cout << endl;
	//迭代器循环 
	for (vector<int> :: iterator it = v.begin(); it != v.end(); it++) cout << *it << " "; 
    return 0;
} 

在这里插入图片描述

四、stack用法&字符串和数字转换

1.定义和构造

//定义和构造
//push入栈一个元素
//pop出栈一个元素,pop无返回值 
//top取栈顶元素 
//size查看元素个数 

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>

using namespace std;

int main()
{
	stack<int> s;
	s.push(2);
	s.push(3);
	cout << s.size() << endl;
	cout << s.top() << endl;//说明是先进后出的一个容器 
	s.pop();
	cout << s.top() << endl;
	return 0;	
}

在这里插入图片描述

2.正序和逆序输出


#include <cstring>
#include <cstdio>
#include <iostream>
#include <stack>
#include <algorithm>
#include <sstream>

using namespace std;
int main()
{
	string str;
	getline(cin, str);
	stringstream ss;
	ss << str;
	while(ss >> str) cout << str;
	return 0;
}

//逆序输出

#include <cstring>
#include <cstdio>
#include <iostream>
#include <stack>
#include <algorithm>
#include <sstream>

using namespace std;
int main()
{
	string str;
	stack<string> s;
	getline(cin, str);
	stringstream ss;
	ss << str;
	//while(ss >> str) cout << str;
	while(ss >> str) s.push(str);
	while(!s.empty())
	{
		cout << s.top();
		s.pop();
		if(s.size() != 0) cout << " ";
	}
	return 0;
}

在这里插入图片描述

3.流入流出数字和字符串转换

字符串转数字

//字符串转数字 

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
#include <sstream>

using namespace std;

int main()
{
	string s = "1234";
	int i;
	stringstream ss;
	ss << s;//ss流进s 
	ss >> i;// ss流出到i 
	cout << i;

	return 0;
}

数字转字符串

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
#include <sstream>

using namespace std;

int main()
{
	int a = 1234;
	string out;
	stringstream ss;
	ss << a;
	ss >> out;
	cout << out; 
	return 0;
}

五、queue用法

//先进先出 
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;

int main()
{
	queue<int> q;
	q.push(5);
	q.push(6);
	cout << q.front() << endl;
	q.pop();
	cout << q.front() << endl;
	cout << q.size();
	return 0;
}

在这里插入图片描述

六、map用法

//map底层是树状结构,有序 
// unordered_map底层是哈希结构,无序 

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>

using namespace std;

int main()
{
	map<int, int> m;
	m[6] = 3;
	m[5] = 8;
	m[4] = 9;
	map<int, int> :: iterator i;
	for (i = m.begin(); i != m.end(); i++)
	{
		cout << i -> first << " " << i -> second << endl;
	}
	return 0;
 } 

在这里插入图片描述

七、set用法

set是一个集合,不允许有重复元素
set底层是一个树状结构,有序
unordered_set 哈希结构,无序,快

//set是一个集合,不允许有重复元素 
//set底层是一个树状结构,有序
//unordered_set 哈希结构,无序,快 
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <set>

using namespace std;

int main()
{
	set<int> s;
	s.insert(3);
	s.insert(4);
	s.insert(4);
	s.insert(4);
	cout << s.size() << endl;
	set<int> :: iterator i;
	for (i = s.begin(); i != s.end(); i++) cout << *i << " ";
	return 0; 
}

在这里插入图片描述

八、dequeue用法

deque是一个双端队列,头和尾都可以操作
可以进行排序

//deque是一个双端队列,头和尾都可以操作
//可以进行排序 
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <deque>

using namespace std;

int main()
{
	deque<int> d;
	d.push_back(1);
	d.push_back(2);
	d.push_front(9);
	d.push_front(4);
	
	deque<int> :: iterator i;
	for (i = d.begin(); i != d.end(); i++) cout << *i << " ";
	cout << endl;
	//排序 
	sort(d.begin(), d.end(), greater<int>());
	for (i = d.begin(); i != d.end(); i++) cout << *i << " ";
	cout << endl;
	
	
	d.pop_back();
	d.pop_front();
	for (i = d.begin(); i != d.end(); i++) cout << *i << " ";
	return 0;
}

在这里插入图片描述

九、list用法

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <list>

using namespace std;

int main()
{
	list<int> li;
	li.push_back(6);
	li.push_back(5);
	li.insert(++ li.begin(), 2);
	list<int> :: iterator i;
	for (i = li.begin(); i != li.end(); i++) cout << *i << " ";
	return 0;
}

在这里插入图片描述

十、文档

1.英文
2.中文

发布了77 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xingfushiniziji/article/details/103937921
今日推荐