STL--容器string、vector、deque


STL--容器string、vector、deque

这三种容器都是可以随机访问的,所以他们支持随机访问,随机存取的迭代器,他们的迭代器都可以跳跃式的访问,并且还能存取,例如it+3这种操作可以实现。

一、string

本质是字符数组,所以可以赋值字符串后进行修改。

1.构造

string str, str1, str2.......    //创建一个空的字符串,str为

const char* str = "hello world!";   string s2(str);        //使用字符串s初始化

string s3(s2);    //使用一个字符串对象初始化另一个字符串对象 如:string s4(10,’q’);   //使用n个字符c初

2.赋值

等号赋值:右边可以直接是 char、char*、string
str = "hello world!";
str1 = str;

assign赋值:使用assign接口
str.assign("hello C++");  //用字符串赋值
str1.assign("hello C++",5);  //前五个字符,这里针对
str1.assign(str);  //用str初始化str1
str(10,’w’)  //用十个w初始化

3.拼接

使用+=符号: 可拼char*、char、string类型
str = "我爱玩游戏";
str += "耶";   //现在str就是"我爱玩游戏耶"

使用append:
str.append("love"); //现在str变成"我爱玩游戏耶love"
str.append("love",1)//现在str变成"我爱玩游戏耶lovel"
str.append(str1);
str.append(str1,2,1)//假如str1是"love"那么就将str1第2(位置是从0开始!!!)个位置开始的1个连续字符添加到str末尾


4.查找和替换  //三个:find、rfind、replace 查找的都是第一次出现的位置

str.find("love")  //整体等于一个整形,没找到-1,找到返回下标值
str.rfind("love")  //眼熟吗,它从右往左返回从左往右数的下标,(不是倒字符)
replace(1,3,"1111")   //一号位置起三个字符替换成1111(替换四个都进去)

5.比较  //括号里可以是char* 或者string,主要用来比是否相等

str.compare(str1)   //逐个对比asci码, =返回0,>返回1,<返回-1

6.存取   //可读可写

str[1]   //可以直接取字符值
str.at(1) //和上面一样

7.插入和删除 //可以插入char*、char、string类型

str.insert(下标,n,类型名)  //插入n个字符,或插入一个字符串
str.erase(下标,n)


8.子串获取

 

str.substr(下标,n)  //返回由pos开始的n个字符组成的字符串

二、vector //单端数组

1.构造

vector v, v1………;      //默认构造,为空

vectorv2(v1.begin(),v1.end());   //将迭代器区间内元素赋值给本身

vectorv3(10,100);    //数组是十个100

vectorv4(v3);        //直接将v3拷贝给v4

2.赋值

等号赋值:

v = v1;        //直接将v1赋值给v,动态数组不用考虑大小

assign赋值:

v2.assign(v1.begin(),v1.end());  //和上面很类似,不过这个是赋值

v3.assign(10,100);     //同上

3.容量与大小

v.empty()   //如果空则返回true,反之false

v.capacity()  //返回容器的容量,与大小区别

v.size()   //返回当前数组大小(元素个数)

v.resize(size,elem)   //重新指定数组大小为size,超出删除,变大则用elem填充

4.插入删除

v.push_back(elem);  //使用elem插入数组尾部

v.pop_back();    //删除最后一个元素

v.insert(v.pos,elem);  //迭代器pos位置,插入elem,其余后移

v.insert(v.pos,n,elem);  //迭代器pos位置,插入n个elem

v.erase(v.pos);  //删除迭代器指向的元素

v.erase(v.beg,v.end);  //删除迭代器左闭右开的元素

v.clear();  //全删

5.数据存取

v.at(下标)  //返回下标的存储数据

v[下标]  //同上

v.front()  //返回容器中的第一个数据元素

v.back()   //返回容器中最后一个元素

6.互换容器

v.swap(v1)  //交换v与v1容器的元素

7.预留空间

v.Reserve(len)   //会预留len长度的空间,但不会初始化无法访问需要赋值,可以减少动态扩展的次数

三、Deque  //双端数组,它对头尾插入删除都方便,而vector头插删需要移动元素!但vector访问快

1.构造

 

deque q, q1………;      //默认构造,为空

dequeq2(q1.begin(),q1.end());   //将迭代器区间内元素赋值给本身

dequeq3(10,100);    //是十个100

dequeq4(q3);        //直接将q3拷贝给q4

2.赋值

等号赋值:

q1 = q2;  //q1赋值给q2

assign赋值:

q.assign(q1.begin(),q1.end);   //左闭右开赋值

q.assign(n,elem);   //vector

3.大小

q.empty()   //如果空则返回true,反之false

q.capacity()  //返回容器的容量,与大小区别

q.size()   //返回当前大小(元素个数)

q.resize(size,elem)   //重新指定大小为size,超出删除,变大则用elem填充

4.插入删除   //这个和上面的vector区别就来了

两端插入删除:

q.push_back(elem);

q.push_front(elem);

q.pop_back();

q.pop_front();

指定位置插入删除:

q.insert(q.pos,elem);  //迭代器pos位置,插入elem,其余后移

q.insert(q.pos,n,elem);  //迭代器pos位置,插入n个elem

q.insert(q.pos,q1.beg,q1.end)  //三个迭代器,细品

q.erase(q.pos);  //删除迭代器指向的元素

q.erase(q.beg,q.end);  //删除迭代器左闭右开的元素

q.clear();  //全删

5.数据存取

 

q.at(下标)  //返回下标的存储数据

q[下标]  //同上

q.front()  //返回容器中的第一个数据元素

q.back()   //返回容器中最后一个元素

排序操作      

sort(q.begin(),q.end())  //左闭右开,排序从小到大

                    //支持随机访问的都能用sort!直接排序

相关