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
vector
vector
vector
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
deque
deque
deque
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!直接排序