STL

数组排序

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a[]={2,1,5,0,-1,5,9};
	sort(a,a+7);//相当于头指针和尾指针(迭代器)
	for(int i=0;i<7;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	system("pause");
	return 0;	
} 

输出结果:-1 0 1 2 5 5 9

string

概念

相当于char*的封装,理解为字符串

获取一行字符串

hello world:

	string s;
	getline(cin,s);
	cout<<s;

+=运算

	string s;
	s+="hello";
	s+=" world";
	s+="5";
	cout<<s;

输出结果:hello world5
如果+数字会变为ASCII码

排序

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	string s="5418340";
	sort(s.begin(),s.end());
	cout<<s;
	system("pause");
	return 0;
}

输出结果:0134458

erase函数

	string s="5418340";
	s.erase(s.begin());
	s.erase(--s.end());
	cout<<s;

输出结果:41834

substr函数

string s="5418340";
s=s.substr(1,3);//从第一个开始,一共取三个
cout<<s;

输出结果:418

若为s=s.substr(5,100);
或s=s.substr(5,-1);//-1也为取到最后一位

输出结果:40

循环

#include<iostream>
using namespace std;
int main()
{
	string s="5418340";
	for(int i=0;i<s.length();i++)
	{
		cout<<s[i];	
	}
	cout<<endl;
	for(string::iterator it=s.begin();it!=s.end();it++)
	{
		cout<<*it;
	}
	cout<<endl;
	for(auto x:s)
		cout<<x;
	cout<<endl;
	system("pause");
	return 0;
}

输出结果:5418340 5418340

vector

相当于数组

#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int> v;//构造
	for(vector<int>::iterator it=v.begin();it!=v.end();it++)
	{
		cout<<*it;
	}
	system("pause");
	return 0;
}

构造方法

vector<int>v;
vector<int>v(5);//容量为5
vector<int>v(5,1);//容量为5,存放数量为1,即5个1
vector<int>v{1,2,3,4,5};

获取元素

用[ ]或at

vector<int>v{1,2,3,4,5};
cout<<v[1];//2
cout<<v.at(2);//3

方法

push_back追加:v.push_back(5);//在最后加一个5
resize进行重置大小:v.resize(10);//不赋值默认为0
erase删除元素,复杂度为O(n):v.erase(v.begin());//删除第一个
font和back获取第一个和最后一个:cout<<v.font();

注意

v.back();=v[v.size()-1];=cout<<*--v.end();

排序

vector<int>v{5,1,2,5,4,0,-1};
sort(v.begin(),v.end());
for(auto x:v)
	cout<<x;
sort(v.begin(),v.end(),greater<int>());//从大到小 
for(auto x:v)
	cout<<x;

循环

for(int i=0;i<v.size();i++)
	cout<<v[i];
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
	cout<<*it;
for(auto it=v.begin();it!=v.end();it++)
	cout<<*it;
for(auto x:v)
	cout<<x;

stack

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> s;
	s.push(2);
	s.push(3);
	cout<<s.top()<<endl;
	s.pop();
	cout<<s.top()<<endl;
	return 0;
}

输出结果:3 2

方法

push();//入栈一个元素
pop();//出栈一个元素(无返回值)
top();//取栈顶元素
size();//查看元素个数

进制转换

int itob(int decimal)
{
	stack<int>s;
	int res=0;
	while(decimal!=0)
	{
		s.push(decimal%2);
		decimal/=2;
	}
	while(!s.empty())
	{
		res=res*10+s.top();
		s.pop();
	}
	return res;
}
int main()
{
	int decimal=20;
	cout<<itob(decimal);
	return 0;
}

输出结果:10100

逆序单词

要求:输入一行字符串,将字符串逆序打印

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

输入:hello world ni hao
输出结果:hao ni world hello

字符串转数字(方法一)

#include<iostream>
#include<sstream>
using namespace std;
int main()
{
	string s="1234";
	int i;
	stringstream ss;
	ss<<s;
	ss>>i;
	cout<<i;
	return 0;
}

输出结果:1234

字符串转数字(方法二)

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s="1234";
	int i=stoi(s);
	cout<<i;
	return 0;
}

字符串转数字(方法三)

for循环

数字转字符串(方法一)

int i=1234;
string s;
stringstream ss;
ss<<i;
ss>>s;
cout<<s<<endl;

数字转字符串(方法二)

int a=1234;
cout<<to-string(a)<<endl;

数字转字符串(方法三)

for循环

queue队列

先进先出

#include<iostream>
#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;
	return 0;
}

输出结果:5 6

map

概念:映射(map为树状表(有顺序),unorderedmap为哈希表)

#include<iostream>
#include<map>
#include<unordered_map>
using namespace std;
int main()
{
	map<int,int>m;
	m[6]=3;
	m[5]=8;
	m[4]=9;
	for(auto it=m.begin();it!=m.end();it++)
		cout<<it->first<<" "<<it->second<<endl;
	return 0;
}

输出结果:4   9
                  5   8
                  6   3

pair的用法(map转vector排序)

bool cmp(pair<int,int>a,pair<int,int>b)
{
	return a.first>b.first;
}
int main()
{
	unordered_map<int,int>m;
	m[6]=3;
	m[5]=8;
	m[4]=9;
	vector<pair<int,int>>v(m.begin(),m.end());
	sort(v.begin(),v.end(),tmp);
	for(auto tmp:v)
	{
		cout<<tmp.first<<tmp.second<<endl;
	}
	return 0;
}

输出结果:6   3
                  5   8
                  4   9

set

不允许有重复元素,有序
unordered_set(无序,快)

#include<iostream>
#include<set>
#include<unordered_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;
	for(auto tmp:s)
	{
		cout<<tmp<<" ";
	}
	cout<<endl;
	for(auto it=s.begin();it!=s.end();it++)
		cout<<*it<<" ";
	cout<<endl;
	return 0;
}

输出结果:2  
                  3   4
                  3   4

deque

双端队列

#include<iostream>
#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);
	for(auto tmp:d)
		cout<<tmp<<" ";
	cout<<endl;
	d.pop_back();
	d.pop_front();
	for(auto tmp:d)
		cout<<tmp<<endl;
	return 0;
}

输出结果:4 9 1 2
                  9 1

排序

sort(d.begin(),d.end(),greater<int>());

list

双向链表

#include<iostream>
#include<list>
using namespace std;
int main()
{
	list<int>li;
	li.push_back(6);
	li.push_front(5);
	li.emplace_front(9);
	li.emplace_back(10);
	li.insert(++li.begin(),2);
	for(auto tmp:li)
		cout<<tmp<<endl;
	return 0;
}

输出结果:9
                  2
                  5
                  6
                  10

push和emplace区别(back)

push:要先构造临时对象,再将这个对象拷贝到容器末尾
emplace:直接在容器末尾构造对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值