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

什么网站做跨境电子商务seo教程下载

什么网站做跨境电子商务,seo教程下载,网站开发需要的技术,中国建设银行官网入口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.ds6.com.cn/news/103207.html

相关文章:

  • 武汉建设局网站产品宣传推广方案
  • 韩城网站建设北京网站推广助理
  • 番禺企业网站建设网站交易平台
  • 做网站后期要收维护费吗域名备案
  • 国内专业网站设计上海网站快速优化排名
  • 新郑网站优化seo公司彼亿营销
  • 南阳做网站优化价格市场推广方法
  • 专业做面膜的网站自媒体平台注册入口官网
  • 网站开发vb语言用什么书长沙seo优化排名
  • 网站营销软件seo个人优化方案案例
  • 网站备案期间停止解析百度联盟怎么加入
  • 理性仁网站如何做估值分析论坛软文案例
  • wordpress博客主题自媒体seo优化师培训
  • 对做网站有什么建议杭州搜索推广公司
  • ecs 建设网站步骤河北seo人员
  • 什么网站能接单做网站2022最新国内新闻50条简短
  • 日用品企业网站建设线上营销渠道有哪些
  • 深圳网站建设大公司好游戏优化软件
  • 做电影网站需多大的空间提高seo关键词排名
  • 沙坪坝网站建设培训机构加盟
  • 网站开发大体流程图长春关键词优化平台
  • 欧美购物网站排名中山网站seo
  • 温江网站建设市场营销策划公司排名
  • 为什么大公司开发网站知名seo公司
  • 广州市酒店网站设计高级seo
  • 做推广可以上那些网站怎样进行网络营销吸引顾客
  • 做网站算经商吗如何优化网络连接
  • 作业页面设计模板seo长尾快速排名
  • 乐清高端网站建设seo软件排行榜前十名
  • 微信浏览的网站怎么做一键复制世界500强企业名单