有谁能总结一下C++容器类什么情况下会经常用到
容器用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型。
c++中的容器主要使用如vector,list (顺序容器) 这些都是已经封装好了的,包含头文件"vector","list",通过迭代器iterator访问容器中的数据,map,set(关联容器),关联容器map键值对形式出现key-value,key唯一,mutimap多映射可以不唯一;set是一个单一值的集合,如1,2,3,4 顺序容器:vector,list 分别举例 对比 vector容器的特点:在内存中是一片连续的存储区域,初始化的时候,可以指定容量,比如如果定义容量50 的容器存储 60个string对象,由于初始容量不足60,容器将会重新定义一个容量是原来的2倍新容器,然后拷贝原容器的对象到新容器. 读取速度快,插入删除效率低.如果仅仅在容器头或尾部 进行增删改,推荐使用deque,专门提供了对首尾的操作. list容器特点:相当数据结构的链表,不是一个连续的存储区域,插入,删除很方便,但是查询速度慢 vector vec 就是定义了一个vector容器,可以通过 vec.push_back(), push_font(),insert(position,value) 想vector中添加一个指定值 list ilist list ilist(20 -1) 初始20个值为-1的list 然后操作可以参考这些这些类封转的方法。
关联容器:set map mutimap mutiset key-->value形式 1--1 2--2 3--3 set 形式 1234,键值唯一; 具体容器的操作方法,可以调用其成员函数.关于容器类的英文单词(带中文意思的)
碟子: small dish/ dish
盘子: tray
盆: basin
锅: pan/ pot/ boiler
碗: bowl
杯子: cup/ glass
缸: vat/ jar
瓢: ladle/ dipper
瓶: bottle /vase/ pitcher
罐子: jar /jug/ pitcher/ pot
鼎: tripod
盅: cup
壶: pot/kettle
桶: pail /bucket/barrel/bin
樽: goblet/ bottle/ wine-jarC++中怎么创建一个容器类?
#include?<algorithm>
struct?Person
{
//...Person成员变量
void?print()
{
//todo?输出Person信息
}
};
class?PersonSet
{
public:
enum{DEFAULT_CAPACITY?=?4};
typedef?Person ElemType;
typedef?int SizeType;
PersonSet();
~PersonSet();
void?add(ElemType&?person); //往容器中加入一个对象
//这里返回Person&是不合理的(如果最后没有元素了,这个空的引用要怎么返回???)。
//可以改成Person*或者void
void?removeElement(); //删除容器中的最后一个对象
void?removeElement(int?const&index);//删除容器中指定位置的对象
int?getSize()?const;//获取当前容器中有多少个对象
void?print()?const;//打印容器中各个对象的信息
protected:
void?checkGrow();
void?checkShrink();
void?grow();
void?shrink();
protected:
ElemType** _elements; //为什么要用二级指针,只是为了考察它的用法???
SizeType _capacity;
SizeType _size;
int _index; //index有何用???
};
PersonSet::PersonSet()
:_capacity(DEFAULT_CAPACITY)
,_size(0)
,_index(0)
{
_elements?=?new?ElemType*;
*_elements?=?new?ElemType[_capacity];
}
PersonSet::~PersonSet()
{
delete?[]?*_elements;
delete?_elements;
}
void?PersonSet::add(ElemType&?person)
{
checkGrow();
(*_elements)[_size++]?=?person;
}
void?PersonSet::removeElement()
{
_size--;
checkShrink();
}
void?PersonSet::removeElement(int?const&index)
{
if(index?<?0?||?index?>?_size)
return;
//元素依次前移
std::copy(*_elements+index+1,?*_elements+_size-1,?*_elements+index);
_size--;
checkShrink();
}
int?PersonSet::getSize()?const
{
return?_size;
}
void?PersonSet::print()?const
{
for(SizeType?i?=?0;?i?<?_size;?i++)
{
(*_elements)[i].print();
}
}
void?PersonSet::checkGrow()
{
if(_size?==?_capacity)
grow();
}
void?PersonSet::checkShrink()
{
if(_size?<?_capacity?/?2)
shrink();
}
void?PersonSet::grow()
{
_capacity?>>=?2;
ElemType*?p?=?new?ElemType[_capacity];
std::copy(*_elements,?*_elements?+?_size?-?1,?p);
delete?[]?*_elements;
*_elements?=?p;
}
void?PersonSet::shrink()
{
_capacity?<<=?2;
}关于C++中怎么创建一个容器类?
因为我们使用数组实现的,为了防止过多的分配释放内存,就有了一个_capacity和_size,我们可以通过_size来保证数据的可靠性,所以_size--就可以了.
通过重载[],我们可以通过object.[x],判断x是否大于_size来保证可靠性
gcorelabs怎么样?gcorelabs是创建于2011年的俄罗斯一家IDC服务商,Gcorelabs提供优质的托管服务和VPS主机服务,Gcorelabs有一支强大的技术队伍,对主机的性能和稳定性要求非常高。Gcorelabs在 2017年收购了SkyparkCDN并提供全球CDN服务,目标是进入全球前五的网络服务商。G-Core Labs总部位于卢森堡,在莫斯科,明斯克和彼尔姆设有办事处。...
ZJI发布了一款7月份特别促销独立服务器:香港邦联四型,提供65折优惠码,限量30台(每用户限购1台),优惠后每月520元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。下面列出这款服务器的配置信息。香港邦联四型CPU:2*E5-2...
spinservers是Majestic Hosting Solutions LLC旗下站点,商家提供国外服务器租用和Hybrid Dedicated等产品,数据中心包括美国达拉斯和圣何塞机房,机器默认10Gbps端口带宽,高配置硬件,支持使用PayPal、信用卡、支付宝或者微信等付款方式。农历春节之际,商家推出了几款特别促销配置,最低双路E5-2630Lv3机器每月149美元起,下面列出几款机器...
容器类为你推荐
代发邮件邮件代发会不会有短信代发那么好的市场效益呢?怎么用电脑发短信怎么样用电脑给手机发短信?pps官网pps软件下载中心 pps影视软件下载pat是什么格式pat是什么格式的文件啊netbios协议NETBEUI协议有什么用?gas是什么意思petrol和gas的区别腾讯合作伙伴大会从微信同程旅行买的机票怎么打印电子发票?爱码验证码平台接码验证码接收平台如何使用?怎么查微信注册时间怎么查一个微信公众号的注册时间,发了多少条内容泛微协同办公系统泛微OA系统怎么创建新人员
域名备案号查询 paypal认证 国内php空间 php空间申请 个人域名 数字域名 新家坡 流量计费 南通服务器 稳定免费空间 美国免费空间 卡巴斯基免费试用 免费cdn 购买国外空间 shuang12 中国电信测速网站 注册阿里云邮箱 阿里云邮箱登陆 测速电信 空间申请 更多