C++ STL基本使用方法

string

########################  构造  ############################
string s1;//默认构造

const char * str = "hello world";//通过字符串构造
string s2(str);

string s3(s2);//复制构造

##########################  赋值  #############################
string str1;//赋值方法
str1 = "hello world";	
##########################  拼接  #############################
string s1="我";
s1 +="是帅哥"

s1.append("是帅哥");

s2="12345";
s1.append(s2,0,2);//s1变为“我123”
##########################  查找和替换  #############################
string s1 ="abcdef";
int pos = find("ab");//find返回子串位置坐标,没有则返回-1

s1.replace(1,3,111);
##########################  取值和插入删除 #############################
s1[0];
s1.size();
s1.insert(1,"111");
s1.erase(1,"111");
##########################  子串获取 #############################
string sub_str = s1.sunstr(1,3);

vector 向量

########################  构造  ############################
vector<int> v1;//默认构造
for(int i=0;i<10;i++)
{
	v1.push_back(i)
}

v1(v2)//复制构造
v2=v1;
########################  赋值  ############################
v1.push_back(i);
########################  容量  ############################
int cap = v1.capacity();//返回v1的容量
int size =v1.size();//返回v1的size
v1.resize(15);
########################  插入和删除  ############################
v1.push_back();//在末尾插入
v1.pop_back();//在尾部进行删除

v1.insert(v1.begin(),100);//insert()方法需要迭代器
v1.erase(v1.begin(),v1.end());//删除[begin,end)之间的数据
########################  取值  ############################
v1[1];//下标取值
v1.size();
v1.front();//取第一个元素
v1.back();//取最后的元素	
########################  交换容器和预留空间  ############################
假设v1的大小是10000,容量是3

deque 双端向量

deque和vector类似,可以使用sort()算法进行排序,在algorithm包中,支持随机访问的算法如vector和deque都可以用sort()排序

#include<algorithm>
deque<int> d;
sort(d.begin(),d.end());

stack 栈

stack<int> s;
s.push(2);
s.pop(2);
s.top();//返回栈顶
s.empty();//判断栈是否为空
s.size();//返回栈的大小

queue 队列

queue<int> q;
q.push(1);
q.pop(1);
q.back();//取队尾
q.front();//取队头
q.empty();
q.size();

list 链表

STL中的链表为双向链表,每个节点会记录前一个结点和后一个结点的位置,list的迭代器只能一个一个往前或者往后移动不支持跳跃式访问,list不支持[ ]取值
list不支持随机访问,所以不能用标准算法algorithm中的sort()排序,但是它自身自带了函数sort()
当list中为自定义类型时,如自定义的person类,需要给sort()传入排序函数compare,其返回值为bool

list<int> lis;
lis.remove(a);//移除所有值为a的元素
lis.reverse();//链表反转
//当list中为int类型时,可以直接使用sort()排序
lis.sort();
//当list中为自定义类型时,如自定义的person类,需要给sort()传入排序函数compare,其返回值为bool
//先按照年龄排序,年龄相同按照身高排序
bool compare(Preson &p1,Person &p2)
{
	if(p1.age==p2.age)
	{
	return p1.heigh>p2.heigh;
	}
	return p1.age>p2.age;
}

set

set属于关联式容器,插入新元素后自动会排好序,不允许重复的值,即使插了重复的不会报错但是没用仍然只会有一个
set使用find查找,找到的话返回一个该元素位置的迭代器,未找到返回set.end()
set不允许有重复元素,multiset允许有重复

set<int> s;
s.insert(1);
########################  查找 ############################
set<int>::iterator pos = s.find(5);
if(pos!=s.end())
{
	cout<<“找到元素”<<endl;
}
else{
	cout<<”未找到元素<<endl;
}

set改变排序方式:使用仿函数,在set定义之前传入仿函数改变其排序方式
仿函数的本质上是一个类型

class MyCompare
{
public:
	bool operator()(const Person&p1,const Person&p2)//重载()
	{
		return p1.age>p2.age?;
	}
}
set<int,MyCompare>s2;

map

map的每个元素都是pair对组类,构建map时需要插入pair

//构造
map<int,int> m;
m.insert(pair<int,int>(1,10));
m.insert(pair<int,int>(2,20));
//输出
for(map<int,int>::iterator it =m.begin();it!=m.end();it++ )
{
	cout<<"key=="<<((*it).first)<<"value="<<((*it).second);
}
//插入和删除,查找,排序
m.insert(pair<int,int>(1,10));
m.insert(make_pair(2,10));
m.erase(key);//按照key删除
m.find(key);//按照key查找
//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值