当前位置: 首页 > news >正文

企业开通网站的费用怎么做分录友情链接方面

企业开通网站的费用怎么做分录,友情链接方面,python在线编程器,设计网站数据vector是一个封装了动态大小数组的顺序容器,它能够存放各种类型的对象。 可以删除元素、可以插入元素、可以查找元素,做这些工作我们无需管理容器内存。容器内存管理,这种脏活累活全部交由vector管理。了解一下vector的内存管理策略,能够更加充分的利用内存。 1 vector内存…

vector是一个封装了动态大小数组的顺序容器,它能够存放各种类型的对象。 可以删除元素、可以插入元素、可以查找元素,做这些工作我们无需管理容器内存。容器内存管理,这种脏活累活全部交由vector管理。了解一下vector的内存管理策略,能够更加充分的利用内存。

1 vector内存分配策略

1.1 vector扩大容量的本质

vector 的大小和容量相等(size==capacity)也就是满载时,如果再向其添加元素,那么 vector 就需要扩容。vector 容器扩容的过程需要经历以下 3 步:

  • 完全弃用现有的内存空间,重新申请更大的内存空间;
  • 将旧内存空间中的数据,按原有顺序移动到新的内存空间中;
  • 最后将旧的内存空间释放。

这也就解释了,为什么 vector 容器在进行扩容后,与其相关的指针、引用以及迭代器可能会失效的原因。

1.2 vector使用示例

通过一个vector简单示例,看看vector是如何管理内存的。
程序1

#include <iostream>
#include <vector>class MyClass {
public:MyClass() {++contruct_cnt;std::cout << this << ": MyClass constructor called " << contruct_cnt << " times" << std::endl;}~MyClass() {++deconstrcut_cnt;std::cout << this << ": MyClass deconstrcut called " << deconstrcut_cnt << " times" << std::endl;}MyClass(const MyClass &tmp) {++copy_construct_cnt;std::cout << this << ": MyClass copy_constructor called " << copy_construct_cnt << " times"  << "copy from " << &tmp << std::endl;} 
private: static int contruct_cnt;static int deconstrcut_cnt;static int copy_construct_cnt;     
};int MyClass::contruct_cnt = 0;
int MyClass::deconstrcut_cnt = 0;
int MyClass::copy_construct_cnt = 0;  void VectorTest1()
{MyClass a, b, c, d, e;std::vector<MyClass> myVector;std::cout << std::endl << "======a======" << std::endl;myVector.push_back(a);std::cout << "vector capacity is " << myVector.capacity() << std::endl;std::cout << "vector size is "<< myVector.size() << std::endl;std::cout << std::endl <<"======b======" << std::endl;myVector.push_back(b);std::cout << "vector capacity is " << myVector.capacity() << std::endl;std::cout << "vector size is "<< myVector.size() << std::endl;std::cout << std::endl << "=======c=====" << std::endl;myVector.push_back(c);std::cout << "vector capacity is " << myVector.capacity() << std::endl;std::cout << "vector size is "<< myVector.size() << std::endl;std::cout << std::endl << "=======d=====" << std::endl;myVector.push_back(d);std::cout << "vector capacity is " << myVector.capacity() << std::endl;std::cout << "vector size is "<< myVector.size() << std::endl;std::cout << std::endl << "========e====" << std::endl;myVector.push_back(e);    std::cout << "vector capacity is " << myVector.capacity() << std::endl;std::cout << "vector size is "<< myVector.size() << std::endl;// 当myVector离开作用域时,它的析构函数会被调用,从而调用每个元素的析构函数
}int main() {VectorTest1();return 0;
}

执行输出结果如下:

ThinkPad-P15v-Gen-2i:~/work/ybb$ ./a.out 
0x7ffd8b07403b: MyClass constructor called 1 times
0x7ffd8b07403c: MyClass constructor called 2 times
0x7ffd8b07403d: MyClass constructor called 3 times
0x7ffd8b07403e: MyClass constructor called 4 times
0x7ffd8b07403f: MyClass constructor called 5 times======a======
0x55c2cb9282c0: MyClass copy_constructor called 1 timescopy from 0x7ffd8b07403b
vector capacity is 1
vector size is 1======b======
0x55c2cb9282e1: MyClass copy_constructor called 2 timescopy from 0x7ffd8b07403c
0x55c2cb9282e0: MyClass copy_constructor called 3 timescopy from 0x55c2cb9282c0
0x55c2cb9282c0: MyClass deconstrcut called 1 times
vector capacity is 2
vector size is 2=======c=====
0x55c2cb9282c2: MyClass copy_constructor called 4 timescopy from 0x7ffd8b07403d
0x55c2cb9282c0: MyClass copy_constructor called 5 timescopy from 0x55c2cb9282e0
0x55c2cb9282c1: MyClass copy_constructor called 6 timescopy from 0x55c2cb9282e1
0x55c2cb9282e0: MyClass deconstrcut called 2 times
0x55c2cb9282e1: MyClass deconstrcut called 3 times
vector capacity is 4
vector size is 3=======d=====
0x55c2cb9282c3: MyClass copy_constructor called 7 timescopy from 0x7ffd8b07403e
vector capacity is 4
vector size is 4========e====
0x55c2cb9282e4: MyClass copy_constructor called 8 timescopy from 0x7ffd8b07403f
0x55c2cb9282e0: MyClass copy_constructor called 9 timescopy from 0x55c2cb9282c0
0x55c2cb9282e1: MyClass copy_constructor called 10 timescopy from 0x55c2cb9282c1
0x55c2cb9282e2: MyClass copy_constructor called 11 timescopy from 0x55c2cb9282c2
0x55c2cb9282e3: MyClass copy_constructor called 12 timescopy from 0x55c2cb9282c3
0x55c2cb9282c0: MyClass deconstrcut called 4 times
0x55c2cb9282c1: MyClass deconstrcut called 5 times
0x55c2cb9282c2: MyClass deconstrcut called 6 times
0x55c2cb9282c3: MyClass deconstrcut called 7 times
vector capacity is 8
vector size is 5
0x55c2cb9282e0: MyClass deconstrcut called 8 times
0x55c2cb9282e1: MyClass deconstrcut called 9 times
0x55c2cb9282e2: MyClass deconstrcut called 10 times
0x55c2cb9282e3: MyClass deconstrcut called 11 times
0x55c2cb9282e4: MyClass deconstrcut called 12 times
0x7ffd8b07403f: MyClass deconstrcut called 13 times
0x7ffd8b07403e: MyClass deconstrcut called 14 times
0x7ffd8b07403d: MyClass deconstrcut called 15 times
0x7ffd8b07403c: MyClass deconstrcut called 16 times
0x7ffd8b07403b: MyClass deconstrcut called 17 times

上面的代码,加了很多打印,可以很好的分析程序执行的情况,这里主要说一下myVector在析构的时候,要调用存放在vector中元素的析构,再释放myVector占用的空间。
同时可以看到在填充vector的时候,会发生大量的拷贝构造,造成资源浪费,下面给出一个极端示例展示Vector在push_back时调用的拷贝构造函数次数。

程序2

#include <iostream>
#include <vector>class MyClass {
public:MyClass() {++contru
http://www.hkea.cn/news/154636/

相关文章:

  • 锐捷网络公司排名seo技术介绍
  • 新圩做网站公司拼多多代运营一般多少钱
  • 免费网站可以做cpa?短视频营销的优势
  • b2b外贸营销型网站如何做电商赚钱
  • 建设无障碍网站seo分析报告怎么写
  • 电子商务网站开发进什么科目模板自助建站
  • 威海市住房和城乡建设局官方网站北京seo营销公司
  • 开网页卡优化关键词排名工具
  • wordpress右侧文章归档东莞公司seo优化
  • 个人网站建设需求说明书免费外链生成器
  • 湖南网站建设的公司排名网页制作网站制作
  • 公司网页网站建设 ppt模板app开发公司排行榜
  • 网站开发yuanmus联合早报 即时消息
  • 为什么只有中国人怕疫情seo 页面
  • 网站开发总结报告十大门户网站
  • 临淄信息港发布信息临沂seo建站
  • 门户网站系统介绍企业推广哪个平台好
  • 免费网站建站排行榜网站策划报告
  • 网站设计的评估最近发生的热点新闻
  • 设建网站广告投放渠道
  • 日ip5000的网站怎么做如何提高网站在搜索引擎中的排名
  • 网站描文本链接怎么做深圳互联网营销
  • 一个服务器做两个网站自己做网站
  • 百草味网站建设的活动方案营销型企业网站有哪些
  • 论文课程网站 建设背景项目推广方式有哪些
  • 内部网站建设关键词优化推广策略
  • 一个公司可以做几个网站备案贵阳网络推广排名
  • 武汉高端网站建设免费广告网
  • 大理建网站常用于网站推广的营销手段是
  • js怎么做网站跨境电商网站