STL核心编程

简介: STL核心编程

2.png


容器


序列式容器


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


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


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

目录
相关文章
|
8月前
|
存储 算法 搜索推荐
【C++ STL基础入门】初识STL
【C++ STL基础入门】初识STL
108 0
|
9天前
|
存储 算法 C++
C++一分钟之-标准模板库(STL)简介
【6月更文挑战第21天】C++ STL是高效通用的算法和数据结构集,简化编程任务。核心包括容器(如vector、list)、迭代器、算法(如sort、find)和适配器。常见问题涉及内存泄漏、迭代器失效、效率和算法误用。通过示例展示了如何排序、遍历和查找元素。掌握STL能提升效率,学习过程需注意常见陷阱。
22 4
|
1月前
|
编译器 C语言 C++
从C语言到C++⑩(第四章_模板初阶+STL简介)如何学习STL(上)
从C语言到C++⑩(第四章_模板初阶+STL简介)如何学习STL
15 0
|
1月前
|
算法 编译器 C语言
从C语言到C++⑩(第四章_模板初阶+STL简介)如何学习STL(下)
从C语言到C++⑩(第四章_模板初阶+STL简介)如何学习STL
26 0
|
1月前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
25 0
|
1月前
|
存储 C++ 索引
C++的STL学习笔记
C++的STL学习笔记
81 0
|
1月前
|
存储 算法 C++
【C++入门到精通】C++入门 —— string类(STL)
前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的命名空间的一些知识点以及关于C++的缺省参数、函数重载,引用 和 内联函数也认识了什么是类和对象以及怎么去new一个‘对象’,也相信大家都掌握的不错,接下来博主将会带领大家继续学习有关C++比较重要的知识点——STL(string类)
69 0
|
10月前
|
C语言 C++ 容器
【C++入门到精通】C++入门 —— string类(STL)上
【C++入门到精通】C++入门 —— string类(STL)上
63 0
【C++入门到精通】C++入门 —— string类(STL)上
|
10月前
|
存储 算法 C++
【C++入门到精通】C++入门 —— string类(STL)下
【C++入门到精通】C++入门 —— string类(STL)下
65 0
|
算法 安全 Linux
【C++初阶】五、STL简介(了解)
一、什么是STL STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架
80 0