共计 5082 个字符,预计需要花费 13 分钟才能阅读完成。
title: STL 外围编程
categories:
- [C++]
tags:
- [编程语言]
date: 2021/03/13
作者:hackett
微信公众号:加班猿
容器
序列式容器
string 容器
类外部封装了 char ,治理这个字符串,是一个 char 型的容器
构造函数
string();
string(const char *s);
string(const string& str);
string(int n , char c);
赋值操作
string& operator=(const char* s);
string& operator=(const string &s);
string& operator=(char c);
string& assign(const char* s);
string& assign(const char *s , int n);
string& assign(const string& s);
string& assign(int n , char c);
字符串拼接
string& operator+=(const char* str);
string& operator+=(const char c);
string& operator+=(const string& str);
string& append(const char *s);
string& append(const char *s, int n);
string& append(const string &s);
string& append(const string &s, int pos, int n)
查找和替换
int find(const string& str, int pos = 0) const;
int find(const char* s, int pos = 0) const;
int find(const char* s, int pos, int n) const;
int find(const char c, int pos = 0) const;
int rfind(const string& str, int pos = npos) const;
int rfind(const char* s, int pos = npos) const;
int rfind(const char* s, int pos, int n) const;
int rfind(const char c, int pos = 0) const;
string& replace(int pos, int n, const string& str);
string& replace(int pos, int n,const char* s);
字符串比拟
int compare(const string &s) const;
int compare(const char *s) const;
字符存取
char& operator[](int n);
char& at(int n);
插入和删除
string& insert(int pos, const char* s);
string& insert(int pos, const string& str);
string& insert(int pos, int n, char c);
string& erase(int pos, int n = npos);
子串
string substr(int pos = 0, int n = npos) const;
vector 容器
区别于数组,数组是动态空间,vector 能够动静扩大
构造函数
vector<T> v;
vector(v.begin() , v.end());
vector(n , elem);
vector(const vector &vec);
赋值操作
vector & operator = (const vector & vec);
assign(beg , end);
assign(n , elem);
容量和大小
empty();
capacity();
size();
resize(int num);
resize(int num , elem);
插入和删除
push_back(elem);
pop_back();
insert(const_iterator pos , elem);
insert(const_iterator pos , int count , elem);
erase(const_iterator pos);
erase(const_iterator start , const_iterator end);
clear();
数据存取
at(int index);
operator[];
front();
back();
调换容器
swap(vec);
预留空间
reserve(int len);
deque 容器
双端数组,外部有个中控器,保护每段缓冲区中的内容
构造函数
deque<T> deqT;
deque(beg , end);
deque(n , elem);
deque(const deque & deq);
赋值操作
deque & operator = (const deque &deq);
assign(beg , end);
assign(n , elem);
大小
empty();
size();
resize(num);
resize(num , elem);
插入和删除
push_back(elem);
push_front(elem);
pop_back();
pop_front();
insert(pos , elem);
insert(pos , n , elem);
insert(pos , beg , end);
clear();
erase(beg , end);
erase(pos);
数据存取
at(int index);
operator[];
front();
back();
排序
sort(iterator beg , iterator end);
stack 容器
先进后出,不容许有遍历
构造函数
stack<T> stk;
stack(const stack & stk);
赋值操作
stack & operator=(const stack &stk);
数据存取
push(elem);
pop();
top();
大小操作
empty();
size();
queue 容器
先进先出,不容许遍历
构造函数
queue<T> que;
queue(const queue &que);
赋值操作
queue& operator = (const queue &que);
数据存取
push(elem);
pop();
back();
front();
大小操作
empty();
size();
list
链表构造,属于双向迭代器
构造函数
list<T> lst;
list(beg , end);
list(n elem);
list(const list *lst);
赋值和替换
assign(beg , end);
assign(n , elem);
list &operator = (const list &lsg);
swap(lst);
大小操作
empty();
size();
resize(num);
resize(num , elem);
插入和删除
push_back(elem);
pop_back();
push_front(elem);
pop_front();
insert(pos , elem);
insert(pos , n , elem);
insert(pos , beg , end);
clear();
erase(beg , end);
erase(pos);
remove(elem);
数据存取
front();
back();
反转和排序
reserve();
sort();
关联式容器
set/multiset
所有元素都会在插入时主动被排序
构造函数
set<T> st;
set(const set &st);
赋值
set& operator = (const set &st);
大小和替换
empty();
size();
swap(st);
插入和删除
insert(elem);
clear();
erase(pos);
erase(beg , end);
erase(elem);
查找和统计
find(key);
count(key);
区别
set 不容许容器有反复元素 multiset 容许容器有反复元素
map/multimap
所有元素都是 pair,依据键值主动排序
构造函数
map<T1 , T2> mp;
map(const map &mp);
赋值
map& operator = (const map &mp);
大小和替换
empty();
size();
swap(mp);
插入和删除
insert(elem);
clear();
erase(pos);
erase(beg , end);
erase(key);
查找和统计
find(key);
count(key);
pair
成对呈现的数据,利用对组能够返回两个数据
创立形式
pair<type , type> p(value1 , value2);
pair<type , type> p = make_pair(value1 , value2);
罕用算法
遍历
for_each(iterator beg , iterator end , _func);
// 实现遍历容器
transform(iterator beg1 , iterator end1 , iterator beg2 , _func);
// 搬运容器到另一个容器中
查找
find(iterator beg, iterator end, value);
// 查找指定元素,找到返回指定元素的迭代器,找不到返回完结迭代器 end()
find_if(iterator beg, iterator end, _Pred);
// 按条件查找元素
adjacent_find(iterator beg, iterator end);
// 查找相邻反复元素
bool binary_search(iterator beg, iterator end, value);
// 查找指定元素是否存在
count(iterator beg, iterator end, value);
// 统计元素个数
count_if(iterator beg, iterator end, _Pred);
// 按条件统计元素个数
排序
sort(iterator beg, iterator end, _Pred);
// 对容器内元素进行排序
random_shuffle(iterator beg, iterator end);
// 洗牌 指定范畴内的元素随机调整秩序
merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
// 两个容器元素合并,并存储到另一容器中
reverse(iterator beg, iterator end);
// 将容器内元素进行反转
拷贝和替换
copy(iterator beg, iterator end, iterator dest);
// 容器内指定范畴的元素拷贝到另一容器中
replace(iterator beg, iterator end, oldvalue, newvalue);
// 将容器内指定范畴的旧元素批改为新元素
replace_if(iterator beg, iterator end, _pred, newvalue);
// 将区间内满足条件的元素,替换成指定元素
swap(container c1, container c2);
// 调换两个容器的元素
算术生成算法
accumulate(iterator beg, iterator end, value);
// 计算区间内 容器元素累计总和
fill(iterator beg, iterator end, value);
// 向容器中填充指定的元素
汇合算法
set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
// 求两个容器的交加
set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
// 求两个汇合的并集
set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
// 求两个汇合的差集
如果你感觉文章还不错,记得 ” 点赞关注 “
关注我的微信公众号【 加班猿 】能够获取更多内容