C++学习笔记-抽象容器类型

一、
1、删除操作
(1)erase()
slist.erase(iter);
slist.erase(first,last);//first和last都是iterator标记
(2)pop_back()
2、赋值和对换
(1)slist1=slist2;//slist1有2个元素,slist2有6个元素,则赋值后slist1有6个元素,slist2有6个元素。
(2)slist.swap(slist2);//slist1有2个元素,slist2有6个元素,则赋值后slist1有6个元素,slist2有2个元素。
3、find算法.返回位置
(1)lister=find(dlist.begin(),dlist.end(),some_double_value);
(2)string sname;
sring::size_type pos=sname.find("abc");
(3)sring::size_typepos=sname.find_first_of(sname2);//在sname中查找与sname2中任意一字符匹配的第一次出现
(4)sring::size_typepos=sname.find_first_of(sname2,5);//在sname的第五个位置开始查找与sname2中任意一字符匹配的第一次出现
(5)sring::size_typepos=sname.find_last_of(sname2);//在sname中查找与sname2中任意一字符匹配的最后一次出现
(6)sring::size_typepos=sname.find_last_of(sname2,5);//在sname的第五个位置开始查找与sname2中任意一字符匹配的最后一次出现
(7)sring::size_typepos=sname.find_first_not_of(sname2);//在sname中查找与sname2中任意一字符不匹配的第一次出现
(8)sring::size_typepos=sname.find_first_not_of(sname2,5);//在sname的第五个位置开始查找与sname2中任意一字符不匹配的第一次出现
(9)sring::size_typepos=sname.find_last_not_of(sname2);//在sname中查找与sname2中任意一字符不匹配的最后一次出现
(10)sring::size_typepos=sname.find_last_not_of(sname2,5);//在sname的第五个位置开始查找与sname2中任意一字符不匹配的最后一次出现
4、比较compare(),返回数字,0表示比较成功,负表示小于,正表示大于
(1)sname.compare(pos,3,sname2);//比较sname从第pos位开始的3位字符与sname2是否匹配
5、replace()替换,有十种不同的参数方式
6、assign()拷贝,append()连接,有多种不同的参数方式
sname.assign(sname2,0,4);//0-4个字符拷贝
二、
1、一个需要动态增长的vector必须分配一定内存以便于保存新的序列、按顺序拷贝旧序列的歹毒以及释放旧的内存。如果它的元素是类对象,那么拷贝和释放内存可能需要对每个元素依次调用拷贝构造函数和析构函数。
2、容量(capacity)是指在容器下一次需要增长自己之前能够加入到容器中的元素的总数。长度是指容器当前拥有元素的个数(size)。
3、vector自我增长越频繁,元素插入的开销越大。当开销大时,转换为list或通过指针间接存储复杂的类对象。
4、容器声明
vector<string> svec;
vector<int>ivec(200);创建长度为200的容器
list<int> ilist;
5、插入方法
(1)最简单为push_back()放在队列尾部,push_front()放在队列首部。
(2)svec.insert(要插入的位置,要插入的值),如
svec.insert(slist.begin(),spouse);
svec.insert(iter,spouse);
svec.insert(iter,10,spouse);//插入相同的10个spouse变量值
svec.insert(iter,sarry+2,sarry+4);//插入字符串数组sarry中的第2个到第4个范围内的元素
svec.insert(iter,svec2.begin(),svec2.end());
6、resize()重新设置容器长度。
7、容器支持关系操作符,如<,>等等可以比较两个同类型的容器。
8、迭代器提供一种通用的方法对容器内元素进行访问。
(1)begin()返回第一个元素,end()返回最后一个元素。++iter向前移动,*iter指向元素的值。
(2)const_iterator主要用于访问const容器。
(3)将迭代器移至指定位置如:vector<int>::iteratoriter=vec.begin()+vec.size()/2;iter+=2;但是这些算术运算只适用于vector或deque,因为它们的空间是连续的。
三、
1、由单一类型元素组成的一个有序集合。
2、主要的顺序容器是LIST和VECTOR。
3、关联容器支持查询一个元素是否存在,并可以有效获取元素,两个基本的关联容器类型是MAP映射和SET集合,MAP是一个键/值对,SET是一个单一健值,multimap多映射和multiset多集合支持同一个键的多次出现。
3、vector与list和deque
(1)vectorg表示一段连续内存区域,每个元素被顺序存储在这段内存中,这样删除中间任一个,会导致后面所有元素前移复制。
(2)list表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接,对随机支持不好
(3)deque表示一段连续内存区域,支持高效在首部插入和删除元素,通过两级数组实现,一级表示实际的容器,第二级指向容器的首和尾
4、顺序容器类型的准则:
(1)如果我们需要随机访问一个容器,则vector比list好
(2)如果已知存储元素的个数,vector比list好
(3)如果会在中间插入或删除元素,list好
(4)需要高效在首部插入,deque好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值