乐趣区

关于stl:STL核心编程

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);
 // 求两个汇合的差集

如果你感觉文章还不错,记得 ” 点赞关注

关注我的微信公众号【 加班猿 】能够获取更多内容

退出移动版