太极1:STL:vector和string

26 篇文章 0 订阅

STL:
什么是STL?

STL是C++中标准模板库------------standard template library
实际上STL就是对常见数据结构(线性表(顺序表、链表)+栈和堆列+二叉树+哈希)以模板的方式进行了封装
目的:替用户组织数据
里面和增加了一些非常灵活和通用的算法----->主要是对数据进行操作的sort/reverse

------------------------------分界线-------------------------------------
STL对常见的数据结构的封装(模板类)
序列式容器(线性数据结构)

string:专门用来管理字符串的动态动态类型的顺序表
vector:管理任意类型的动态类型顺序表
list:带头结点循环双向链表
deque:双端队列-----类似于动态的二维数组

关键式容器:----<k,v>
底层为红黑树结构
map
set
multimap
multiset

底层为哈希结构
unordered_map
unordered_set
unordered_multimap
unordered_multisset


**迭代器**
概念:提供一个结构,可以依次遍历容器中的元素,而又无需暴露容器的底层实现原理
作用:主要是给算法来应用的,让算法可以操作任意容器中的数据
本职:就是一个指针||对指针进行分装

----------------------------------------分界线--------------------------

算法:解决问题的步骤
分类:1.与数据结构相关联的算法:就是容器中的成员函数
2.通用算法:sort/reverse/foreach…
注意:算法要操作不同容器中的数据,必须要借助迭代器

仿函数/函数对象:
概念:可以像函数一样使用的对象
实现:只需在该类中将()函数调用运算符重载即可
作用:用来配置算法的功能,使算法更加的灵活

适配器:是一种设计模式
概念:将其他结构进行封装然后形成一种新的结构
容器适配器:stack/queue/priority queue
迭代器适配器:反向迭代器------其内部就是对正向迭代器进行封装
函数适配器

空间配置器(内存池):高效为STL中各个容器申请和释放空间,以及对空间进行管理

-------------------------------------分界线-----------------------------

string:
C语言中实际没有专门的字符串类型

string的常用接口:
构造和析构:
string():构造一个空字符串
string(size_t,char ch):用n个字符串ch构造一个string类型的对象
string(char* str):用C格式的字符串构造string对象
string(const string& s):拷贝构造
迭代器:
begin()/end()

容量:
size_t size()/length(): 返回有效元素的个数
size_t capacity():返回底层空间的总大小
bool empty():检测该字符串是否为空串------->是:true ,否:false
void resize(size_t newsize,char ch=char());

部分操作:
字符串变数字:
string s(“1234”); int i=aoti(s.c_str());
cout<<i<<endl; 打印出来1234

查找:
string s(“iloveyou”);
int i = s.find(“lov”);
cout << i << endl;

截取一段字符串:
string s(“iloveyou”);
string s1=s.substr(2, 5);
cout<<s1<<endl;

------------------------------------分界线------------------------------

vector:
1.底层结构:
动态类型的顺序表,可以存放任意类型的元素

2.常用接口:
构造和析构
vector():构造一个空的vector
vector(size_t n,const T& data=T());用n个值为data的元素构造vector
vector(first,last):用(first,last)区间中的元素构造vector
vector(const vector&):拷贝构造函数

3.迭代器:
begin()/end();

4.容量:
size_t size();返回有效的元素
size_t capacity():返回空间的总大小
bool empty(); 检测vector是否为空,是:true 否:false

5.访问:
1.固定两端访问:
front() 返回第一个元素的引用
back() 返回最后一个元素的引用

6.修改:
void push_back(const T& data) 尾插
void pop_back(): 尾删

任意位置插入:
iterator insert(iterator pos,const T& data)
iterator insert(iterator pos,size_t n,const T& data)
iterator insert(iterator pos,iterator first,iterator last);

任意位置的删除:
iterator erase(iterator pos);
iterator erase(iterator first,iteator last);

将vector中的有效元素清空:
void clear();

交换:
void swap(vector& v);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值