2021-02-23

Stl
1、2、3
1)
Vector
基本变量是三个指向堆空间的指针;

2)
map
_Rb_tree的rb含义?
red black

3)
容器是用来存储数据的。主要有(10)

vector、list、map、set、multimap、multiset、unorderedmap、unorderedset、无锁消息队列、智能指针、string
4)
vector、list、map、set、multimap、multiset、unorderedmap、unorderedset、无锁消息队列、智能指针、string底层数据结构?
答、

5)
不同容器按拼音api总结?
答、
String:
(find()、rfind()、find_first_of()、find_last_of()、find_first_not_of()、find_last_not_of())6
① //默认从位置0(即第1个字符)开始查找
st1.find('c');
②//在st1中,从位置2(l,包括位置2)开始,查找o,返回首次匹配的位置
st1.find('o', 2);
st1.find('c', 0) ;
string st2(\"aabcbcabcbabcc\");
str1 =\"abc\";
③//6,从st2的位置2(b)开始匹配,返回第一次成功匹配时匹配的串(abc)的首字符在st2中的位置,失败返回-1
st2.find(str1, 2);
st2.find(\"abcdefg\", 2, 3);//6 取abcdefg得前3个字符(abc)参与匹配,相当于st2.find(\"abc\", 2)

④//rfind-从指定位置起向前查找,直到串首
st1.rfind('a', 7);
⑤//find_first_of-在源串中从位置pos起往后查找,只要在源串中遇到一个字符,该字符与目标串中任意一个字符相同,就停止查找,返回该字符在源串中的位置;若匹配失败,返回-1
string str6(\"bcgjhikl\");
string str7(\"kghlj\");
⑥//从str1的第0个字符b开始找,g与str2中的g匹配,停止查找,返回g在str1中的位置2
str6.find_first_of(str7, 0);
⑦//find_last_of-与find_first_of函数相似,只不过查找顺序是从指定位置向前
string str(\"abcdecg\");
str.find_last_of(\"hjlywkcipn\", 6) ;//从str的位置6(g)开始向前找,g不匹配,再找c,c匹配,停止查找,返回c在str中的位置5

⑧//find_first_not_of-在源串中从位置pos开始往后查找,只要在源串遇到一个字符,与目标串中的任意字符都不相同,就停止查找,返回该字符在源串中的位置;若遍历完整个源串,都找不到满足条件的字符,则返回-1
str.find_first_not_of(\"kiajbvehfgmlc\", 0);//3 从源串str的位置0(a)开始查找,目标串中有a,匹配,..,找d,目标串中没有d(不匹配),停止查找,返回d在str中的位置3
str.find_last_not_of(\"kiajbvehfgmlc\", 6);
⑨length ()、

十strone+strtwo、
十一strone - strtwo、
十二strone.begin()、
十三strtwo.end()、
十四reverse(strone.begin(),strone.end())、
十五strone.c_str()、
十六rbegin 得到指向反向字符串开头的Iterator
十七rend 得到指向反向字符串结尾的Iterator
十八max_size 字符串可能的最大大小
十九capacity 在不重新分配内存的情况下,字符串可能的大小
二十empty 判断是否为空
二十一operator[] 取第几个元素,相当于数组
二十二data 取得字符串内容地址
二十三operator=赋值操作符
二十四reserve 预留空间
二十五swap 交换函数
二十六insert 插入字符
二十七append 追加字符
二十八push_back 追加字符
二十九operator++操作符
三十erase 删除字符串
三十一clear 清空字符容器中所有内容
三十二resize 重新分配空间
三十三assign 和赋值操作符一样
三十四replace 替代
三十五copy 字符串到空间
三十六rfind 反向查找
三十七find_first_of 查找包含子串中的任何字符,返回第一个位置
三十八find_first_not_of 查找不包含子串中的任何字符,返回第一个位置
三十九find_last_of 查找包含子串中的任何字符,返回最后一个位置
四十find_last_not_of 查找不包含子串中的任何字符,返回最后一个位置
四十一substr 得到子串
四十二compare 比较字符串
四十三operator+ 字符串链接
四十四operator=()判断是否相等
四十五operator!()判断是否不等于
四十六operator<()判断是否小于
四十七operator>>从输入流中读入字符串四十八operator<<字符串写入输出流
四十九getline 从输入流中读入一行

Vector:
vector构造函数
①vector<chat> v; //采用模板实现类实现,默认构造函数

②vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。

③vector(size_type_Count,constvalue_type\u0026_Val) //构造函数将_Count个_Val拷贝给本身。

④vector(const vector &vec);//拷贝构造函数。
//例子 使用第二个构造函数 我们可以...
int arr[]={2,3,4,1,9};

vector<int>v1(arr, arr + sizeof(arr)/ sizeof(int));
vector常用赋值操作
⑤assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
⑥assign(n, elem);//将n个elem拷贝赋值给本身。
⑦vector &operator=(const vector &vec);//重载等号操作符
⑧swap(vec);// 将vec与本身的元素互换。swap额外作用:压缩空间

⑨vector<int>(v).swap(v);

vector大小操作size();//返回容器中元素的个数
十一empty();//判断容器是否为空
十二resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
十三resize(int num,elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
十四capacity();//容器的容量
十五reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。
vector数据存取操作
十六at(int idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range异常。
十七operator[];//返回索引idx所指的数据,越界时,运行直接报错
十八front();//返回容器中第一个数据元素
十九back();//返回容器中最后一个数据元素
vector插入和删除操作
二十insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素ele.
二十一push_back(ele); //尾部插入元素ele二十二pop_back();//删除最后一个元素
二十三erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素
二十四erase(const_iterator pos);//删除迭代器指向的元素
二十五clear();//删除容器中所有元素
List:
list是一个双向链表容器,可高效地进行插入删除元素。
list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。
list使用之前的准备
list对象的默认构造
list采用模板类实现,list对象的默认构造形式:list lstT; 如:
①list<int> lstInt; //定义一个存放int的list容器。
②list<float> lstFloat; //定义一个存放float的list容器。 
③*list<string> lstString; //定义一个存放string的list容器。 \n… \n//尖括号内还可以设置指针类型或自定义类型。
list头尾的添加移除操作④list.push_back(elem); //在容器尾部加入一个元素
⑤list.pop_back(); //删除容器中最后一个元素
⑥list.push_front(elem); //在容器开头插入一个元素
⑦list.pop_front(); //从容器开头移除第一个元素
list的数据存取
⑧list.front(); //返回第一个元素。⑨list.back(); //返回最后一个元素。\nlist与迭代器
十list.begin(); //返回容器中第一个元素的迭代器。
十一list.end(); //返回容器中最后一个元素之后的迭代器。
十二list.rbegin(); //返回容器中倒数第一个元素的迭代器。
十三list.rend(); //返回容器中倒数最后一个元素的后面的迭代器。
list对象的带参数构造
十四list(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间。
十五list(n,elem); //构造函数将n个elem拷贝给本身。
十六list(const list &lst); //拷贝构造函数。list的赋值
十七list.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。
十八list.assign(n,elem); //将n个elem拷贝赋值给本身。
十九list& operator=(const list &lst); //重载等号操作符
二十list.swap(lst); // 将lst与本身的元素互换。
list的大小
二十一list.size(); //返回容器中元素的个数二十二list.empty(); //判断容器是否为空
二十三list.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
二十四list.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
list的插入
二十五list.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
二十六list.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
二十七list.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值。list的删除
二十八list.clear(); //移除容器的所有数据
二十九list.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。
三十list.erase(pos); //删除pos位置的数据,返回下一个数据的位置。
三十一lst.remove(elem); //删除容器中所有与elem值匹配的元素。
list的反序排列
三十二lst.reverse(); //反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素。
Map:
map的基本操作函数:
C++ maps是一种关联式容器,包含“关键字/值”对
①begin() 返回指向map头部的迭代器

②clear() 删除所有元素

③count() 返回指定元素出现的次数

④empty() 如果map为空则返回true
⑤end() 返回指向map末尾的迭代器⑥equal_range() 返回特殊条目的迭代器对⑦erase() 删除一个元素
⑧find() 查找一个元素
⑨get_allocator() 返回map的配置器
十insert() 插入元素
十一key_comp() 返回比较元素key的函数十二lower_bound() 返回键值给定元素的第一个位置
十三max_size() 返回可以容纳的最大元素个数
十四rbegin() 返回一个指向map尾部的逆向迭代器
十五rend() 返回一个指向map头部的逆向迭代器
十六size() 返回map中元素的个数
十七swap() 交换两个map
十八upper_bound() 返回键值给定元素的第一个位置
十九value_comp() 返回比较元素value的函数

Dequeue:
①push_front ()
②pop_front()
③push_back()
④pop_back()
⑤insert()
⑥erase()
⑦resize()
⑧size()
⑨max_size()


stack:
操作 比较和分配堆栈"
①empty() 堆栈为空则返回真
②pop() 移除栈顶元素
③push() 在栈顶增加元素
④size() 返回栈中元素数目
⑤top() 返回栈顶元素
shared_ptr<int> sadptr(new int(2));
什么时候用shared_ptr、weak_ptr、unique_ptr?
答、
在调用过程中如果堆对象要跨越不同类的成员函数,可以用shared_ptr;
如果堆对象不会跨越不同类的成员函数,用unique_ptr;
如果要检测一个智能指针对象是否含有堆对象,可以用weak_ptr;

容器的泛型比算法多得多;

---------------------------------------------------------------------------------------------
要点:
①使用getline输入;cin遇到空格和停止字符会停止输入;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值