C++,STL

一、STL

一 、概念

    底层和各自的效率。

    vector:底层是数组,查询快,插入删除慢。

    list: 底层是双向链表,查询慢,插入删除快。

    都有长度,长度都可以变化,都使用对象调用size()得到,

    foreach遍历相同。

    获取迭代器的方式相同,迭代器前面加"*"都能取出元素。

    取到元素后都能修改。

    创建方式完全相同。

二、vector

1、创建vector

vector、list、deque的创建是完全相同的。

注:C5的取值范围是前闭后开[下标2,下标5)

2、得到长度

v.size(),默认长度为0。

vector、list、deque对于size()是完全相同的

3、foreach遍历vector

去掉const修改值:

vector变量

vector、list、deque、set 对于foreach是完全相同的。

4、迭代器

(1)创建vector迭代器变量

    vector::iterator it;

(2)得到指向首元素的迭代器

    vector::iterator it = myvector.begin();

(3)得到指向最后元素的下一位

    vector::iterator it = myvector.end();

(4)vector迭代器的运算, 都是类中的运算符重载的结果

    1、++、 -- 、 示例

    2、+整数、 -整数、

    3、*

    4、关系运算:<、>、>=、<=。

 (5)使用迭代器遍历元素

5、获取元素的引用, 修饰元素

    得到元素的引用了就可以使用“=”修饰元素的值。

(1)v.at(index) 等效于 v[index]

(2)*it, it是迭代器

封装:根据索引得到元素

*(v.begin()+index)

(3)v.back() 得到最后一个元素

(4)v.front() 得到第一个元素

6、加入与删除元素

    加入与删除都会改变容器的长度

(1)尾部加入元素

v.push_back(值)

(2)迭代器指向的元素前插入元素

    v.insert(it, 值);

    封装:在索引元素前插入元素

    v.insert(v.begin+index, 值);

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

(4)v.clear();删除所有元素

(5)v.erase(it)删除迭代器指向的元素

    封装:删除索引处的元素

    v.erase(v.begin()+index);

7、排序

    使用c函数sort可以进行排序,要求导入头文件<algorithm>

sort(it1, it2, 排序规则函数)

三、list

1、创建list

vector、list、deque的创建是完全相同的。

2、得到长度

v.size()

vector、list、deque对于size()是完全相同的

3、foreach遍历vector

vector、list、deque、set 对于foreach是完全相同的。

4、迭代器

(1)创建list迭代器变量

list::iterator it;

(2)得到指向首元素的迭代器

list::iterator it = c.begin();

(3)得到指向最后元素的下一位。

list::iterator it = c.end();

(4)list迭代器的运算, 都是类中的运算符重载的结果

1、++、 -- 、

2、+整数、 -整数、 有异常,不能使用

3、*

4、关系运算, 有异常,不能使用

    (5)使用迭代器遍历元素

5、获取元素的引用, 修改元素

得到元素的引用了就可以使用“=”修饰元素的值。

(1)c.at(index) 等效于c[index] 有异常

(2)*it, it是迭代器

(3) 根据索引获取元素的引用

(4)c.back() 得到最后一个元素

(5)c.front() 得到第一个元素

6、加入与删除元素

加入与删除都会改变容器的长度

(1)尾部加入元素

        v.push_back(值)

(2)最前插入元素

        c.push_front(值);

(3)c.insert(it, 值) //把值插入迭代器it指向的元素前面

(4)c.pop_back();删除最后一个元素

(5)c.pop_front();删除第一个元素

(6)v.clear();删除所有元素

(7)v.erase(it)删除迭代器指向的元素

7、排序

    使用c函数sort可以进行排序,要求导入头文件

        sort(it1, it2, 排序规则函数);

    示例:对所有元素排序

        sort(c.begin(); c.end(); 排序函数);

四、deque

1 底层是散列桶

2 vector与list中使用的技术,deque都能使用。

五、set/multset

    内部不能有重复的元素,当有重复元素时会合并,并且加入的元素会自动排序, 只能取出元素,不能修饰元素。

1、创建set

与vector的创建基本相同,仅仅是在创建的方式上少了两种方式即set c(2)和 set有错。

2、得到长度

    c.size();

3、foreach遍历vector

    vector、list、deque、set 对于foreach是完全相同的。

4、迭代器

(1)创建set迭代器变量

set::iterator it;

(2)得到指向首元素的迭代器

set::iterator it = c.begin();

(3)得到指向最后元素的下一位。

set::iterator it = c.end();

(4)根据值,找到迭代器。(list,vector,deque没有该函数)

set::iterator it = c.find(v);

(4) set迭代器的运算, 都是类中的运算符重载的结果

1、++、 -- 、 示例

2、+整数、 -整数、 有异常

3、* 只能读,不能修改

4、关系运算 有异常

(5) 使用迭代器遍历元素

5、获取元素的引用, 不能修改元素

    获取元素后,是只读的,不能改,并且只能以foreach或it的方式得到其中的元素。

(1) c.at(index) 等效于c[index] 有异常

(2)*it, it是迭代器, 只读的,不能改

(3) 根据索引获取元素的引用, 实计这种方式无意义,本质上set中没有索引

(4) c.back() 得到最后一个元素, 有异常

(5) c.front() 得到第一个元素, 有异常

6、加入与删除元素

c.insert(值)

c.clear();删除所有元素

c.erase(值); 根据值删除元素

c.erase(it); 根据迭代器删除元素

7、加入自定义对象

        内部不能有重复的元素, 并且要自动排序,所以加入自定义类的对象就会失败,除非类满足条件:重写三个函数,函数要求是const函数, 即重写

六、map/multmap

1、创建

2、加入

(1)只有加入,没有前后或中间插入,因为它会根据键自动排序,并且,键是不可重复的。

(2)"键"是有要求的,只能是char, short,int,long,float,double,string, 如果要把对象当作键,则要求与set中的对象的要求相同,一般不适用。

(3)加入的方式有两种,功能相同, 因为键不可重复,所以加入时,如果其中已经有同名的键,则加入不会生效。但没有异常

3、迭代器

(1)创建迭代器变量

(2)得到迭代器值

 (3) 迭代器的运算

4、遍历

5、获取

it->first

it->second

6、修改 it->second=值

只能改值,不能改键

7、删除 m.erase(it),

根据迭代器删除

二、结构体

       C++结构体与C++中类的唯一区别是:

1)、结构体权限修饰符默认为public。

2)、类中的权限修饰符默认为private

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clown_30

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值