常用C++标准模板库(STL)【笔记】


前言

对C++标准模板库(STL)的学习所整理的笔记


常用C++标准模板库(STL)

1. vector

vector:向量,也可理解为变长数组,即长度根据需要而自动改变的数组

使用条件:

#include <vector>
using namespace std;

vector定义:

vector<int> v;	//一维变长数组 int型
vector<vector<int> > v;	//二维变长数组 int型, >>之间加上空格
vector<int> v[100];	//v[0] ~ v[99]每个都是一个vector容器, 一维固定, 一维变长

vector容器内元素的访问:

//通过下标访问, index范围 0 ~ v.size()-1
v[index];
//通过迭代器访问, v.begin()获取v的首元素地址, v.end()获取v的尾元素的下一个元素的地址, 左闭右开思想; 不支持it < v.end()这种写法
for(vector<int>::iterator it = v.begin();it!=v.end();it++){
	cout<<*it;
}
//在vector中,还支持v.begin()+3这种迭代器加上整数的写法
vector<int>::iterator it = v.begin();
for(int i = 0;i < v.size();i++){
	cout<<*(it+i);
}

vector常用函数:

v.push_back(x);	//将x添加到向量v的末尾
v.pop_back();	//删除向量v的尾元素
v.size();	//获取向量v中元素的个数
v.clear();	//清空向量v中的所有元素
v.insert(it, x);	//在迭代器it处插入元素x
v.erase(it);	//删除迭代器it处的元素(删除单个元素)
v.erase(first, last);	//删除迭代器[first, last)内的元素(删除区间内的所有元素)

2. set

set:集合,是一个内部自动升序且不含重复元素的容器

使用条件:

#include <set>
using namespace std;

set定义:

set<int> st;	//一维变长集合 int型
set<set<int> > st;	//二维变长集合 int型, >>之间加上空格
set<int> st[100];	//st[0] ~ st[99]每个都是一个set容器, 一维固定, 一维变长

set容器内元素的访问:

//set只能通过迭代器访问, st.begin()获取st的首元素地址, st.end()获取st的尾元素的下一个元素的地址, 左闭右开思想; 不支持it < st.end()这种写法
for(set<int>::iterator it = st.begin();it!=st.end();it++){
	cout<<*it;
}

set常用函数:

st.insert(x);	//将x插入set容器中,并自动递增排序和去重
st.find(value);	//在st容器中查找值value,并返回它的迭代器it
st.erase(it);	//传入想删除元素的迭代器it, 可结合find函数使用:st.erase(st.find(value));(删除单个元素)
st.erase(value);	//传入想要删除的元素值value(删除单个元素)
st.erase(first, last);	//删除迭代器[first, last)内的元素(删除区间内的所有元素)
st.size();	//获取集合st中元素的个数
st.clear();	//清空集合st中的所有元素

3. string

字符串

使用条件:

#include <string>
using namespace std;

string定义:

string s;	//字符串变量定义
string s = "abcd";	//字符串变量定义并初始化

string中内容的访问:

//通过下标访问
s[index];
//使用cin和cout读入和输出字符串
#include <iostream>
using namespace std;
string s;
cin>>s;
cout<<s;
//使用printf()输出字符串
#include <stdio.h>
printf("%s\n", s.c_str());
//通过迭代器访问, s.begin()获取s的首元素地址, s.end()获取s的尾元素的下一个元素的地址, 左闭右开思想; 不支持it < s.end()这种写法
for(string::iterator it = s.begin();it!=s.end();it++){
	cout<<*it;
}
//在string中,还支持s.begin()+3这种迭代器加上整数的写法
string::iterator it = s.begin();
for(int i = 0;i < s.size();i++){
	cout<<*(it+i);
}

string常用函数:

operator +=	//拼接
compare operator == != < <= > >=	//比较大小,字典序
s.length();	s.size();	//string长度
s.insert(index, string);	//在s[index]处插入string
s.insert(s.begin()+index, s2.begin(), s2.end());	//将字符串s2的[s2.begin(), s2.end())插入到s的迭代器s.begin()+index处
s.erase(it);	//删除迭代器it处的元素(删除单个元素)
s.erase(first, last);	//删除迭代器[first, last)内的元素(删除区间内的所有元素)
s.erase(index, length);	//删除字符串s内以index为起始, 长度为length的字符
s.clear();	//清空字符串
s.substr(index, length);	//返回s内以index为起始, 长度为length的子串
string::npos	//函数find()失配时的返回值, 等于-1或者4294967295
s.find(str);	//如果str是s的子串, 则返回第一次出现的位置, 否则返回string::npos
s.find(str, index);	//从s的index开始查str, 返回值与上述相同
s.replace(index, length, str);	//把字符串s的index起始, 长度为length的子串用str代替
s.replace(it1, it2, str);	//把字符串s的迭代器[it1, it2)的子串用str代替

4. map

如果把一个int型的数组理解为index(int)到data(int)的映射,那么map就是任何基本类型(包括STL容器)到任何基本类型(包括STL容器)的映射,map会以键key从小到大的顺序自动排序

使用条件:

#include <map>
using namespace std;

map定义:

map<string, int> mp;	//string到int的映射
map<set<int>, int> mp;	//set容器到int的映射

map容器中内容的访问:

//通过key访问
map<char, int> mp;
mp['a'];	//map通过key访问value, 且key唯一
//通过迭代器访问, mp.begin()获取s的首元素地址, mp.end()获取s的尾元素的下一个元素的地址, 左闭右开思想; 不支持it < mp.end()这种写法
for(map<char, int>::iterator it = mp.begin();it!=mp.end();it++){
	cout<<"key: "<<it->first;
	cout<<"value: "<<it->second;
}

map常用函数:

mp.find(key);	//返回键为key的映射的迭代器
mp.erase(it);	//删除迭代器it处的元素(删除单个元素)
mp.erase(key);	//删除键key处的元素(删除单个元素)
mp.erase(first, last);	//删除迭代器[first, last)内的元素(删除区间内的所有元素)
mp.size();	//获取map中映射的对数
mp.clear();		//清空map中的所有元素

5. queue

queue(队列):一个先进先出的容器

使用条件:

#include <queue>
using namespace std;

queue定义:

queue<int> q;	//一个int型的先进先出的容器

queue容器中内容的访问:

//队列(queue)是一种先进先出的数据结构, 通过front()访问队首元素, back()访问队尾元素
q.front();		//访问队首元素
q.back();		//访问队尾元素

queue常用函数:

q.push(x);	//将x入队
q.front();	//访问队首元素
q.back();	//访问队尾元素
q.pop();	//队首元素出队
q.empty();	//判空
q.size();	//获取队列中元素的个数

6. stack

stack(栈):一个后进先出的容器

使用条件:

#include <stack>
using namespace std;

stack定义:

stack<int> st;	//一个int型的后进先出的容器

stack容器中内容的访问:

//栈(stack)是一种后进先出的数据结构, 只能通过top()访问栈顶元素
st.top();		//访问栈顶元素

stack常用函数:

st.push(x);	//将x入栈
st.top();	//访问栈顶元素
st.pop();	//栈顶元素出队
st.empty();	//判空
st.size();	//获取栈中元素的个数

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值