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;
}