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

照明网站设计搜索引擎优化怎么做的

照明网站设计,搜索引擎优化怎么做的,中国网站建设市场排名,建设局文章目录 前言杨辉三角深浅拷贝问题模拟实现的vector对题目杨辉三角引发的程序崩溃原因解决办法 前言 在学习STL容器中,不仅需要学会容器的使用,同时也需要了解容器的大体框架以及各个函数的模拟实现才能更好的去了解这个容器; 杨辉三角 在LeetCode中有一道这样的题目,给定一…

文章目录

  • 前言
    • 杨辉三角
    • 深浅拷贝问题
    • 模拟实现的vector对题目杨辉三角引发的程序崩溃
    • 原因
    • 解决办法

前言

在学习STL容器中,不仅需要学会容器的使用,同时也需要了解容器的大体框架以及各个函数的模拟实现才能更好的去了解这个容器;

杨辉三角

在LeetCode中有一道这样的题目,给定一个非负整数 numRow ,生成「杨辉三角」的前 numRows 行;
[题目链接]
在这里插入图片描述
从图中可知杨辉三角的概念,即每一个数都是它上方左右两数的和,且整个三角形呈对称关系;
这题若是使用c语言的话可以直接用二维数组的思路进行作答;

//c
int** generate(int numRows, int* returnSize, int** returnColumnSizes){int** ret = malloc(sizeof(int*)*numRows); //申请返回的指针空间*returnSize = numRows; //返回行数*returnColumnSizes = malloc(sizeof(int*)*numRows); //为每一列分配空间for(int i=0;i<numRows;i++){ret[i] = malloc(sizeof(int)*(i+1));//分配每一行的个数(*returnColumnSizes)[i] = i + 1;//为第一个以及最后一个赋值ret[i][0] = 1;ret[i][i] = 1;for(int j=1;j<i;j++){ret[i][j] = ret[i-1][j-1] + ret[i-1][j];}}return ret;
}

若是使用C++的话则可以使用STL容器中的vector来模仿二维数组;

//c++
class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>>triangle(numRows);for(int i = 0;i<numRows;i++){triangle[i].resize(i+1,0);triangle[i].front() = triangle[i].back() = 1;}for(int i = 0;i<numRows;i++){for(int j = 0;j<triangle[i].size();j++){if(triangle[i][j]!=1){triangle[i][j] = triangle[i-1][j-1]+triangle[i-1][j];}}}return triangle;}
};

且其思路与C语言中的二维数组法相同;

深浅拷贝问题

[【C++】STL之String模拟实现 ]
在该篇文章中,我写出了对于类似拷贝构造或者扩容时应该进行的深浅拷贝;
在学过一段时间的C++后就能知道,在默认成员函数中存在拷贝构造函数以及赋值重载等函数;
这些默认成员函数在没有显式定义时,编译器会自动生成一个默认的对应函数;
而对于编译器自动生成的拷贝构造以及赋值重载函数,对于内置类型将会进行值拷贝,而对于自定义类型来说将会调用它的默认构造函数;
在这篇文章中对于类似扩容,拷贝构造以及赋值重载函数,采用的方法都是:

开辟一块新的空间,再将原先的数据使用memcpy函数或者在string中使用的strcpy函数拷贝到新的空间;

拷贝构造
//拷贝
My_string::string::string(const string& str):_str(new char[str._size+1]),_size(str._size),_capacity(str._size)
{memcpy(_str, str._str,str._size);_str[_size] = '\0';
}
扩容
 //扩容void My_string::string::reserve(size_t n){if (n > _capacity) {char* temp = new char[n+1];//多开1的空间确保n为有效数据的空间而+1为给'\0'的无效空间strcpy(temp, _str);_capacity = n;delete[]_str;_str = temp;}}
赋值重载
My_string::string& My_string::string::operator=(const string& str)//赋值操作符重载{if (this != &str) {char* temp = new char[str._capacity+1];strcpy(temp, str._str);delete[]_str;_str = temp;_size = str._size;_capacity = str._capacity;}return *this;}

模拟实现的vector对题目杨辉三角引发的程序崩溃

同时,我模拟实现了一个vector容器,这个容器的完成程度暂且不提,在这里的拷贝构造函数,扩容以及赋值重载依旧按照模拟实现string那样使用memcpy进行原数据拷贝到新空间的方法;

//拷贝构造vector(const vector<T>&v){T* tmp = new T[v.size()];_start = tmp;memcpy(tmp,v._start,sizeof(T)*v.size());_finish = _end_of_storage = _start + v.size();}/*扩容reserve*/void reserve(size_t n){if(n>capacity()){size_t count = size();T* tmp = new T[n];memcpy(tmp,_start,sizeof(T)*count);delete[]_start;_start = tmp;_finish = _start+count;_end_of_storage = _start+n;}}

而使用这种方法对杨辉三角题目进行测试时,程序将崩溃;

在这里插入图片描述

而程序崩溃的原因为析构函数;
在这里插入图片描述

原因

当程序在析构函数处崩溃且析构函数并没有其他问题的时候,应该及时将问题的思路转变到对象的深浅拷贝问题;
而这里出的错误正是使用memcpy函数进行拷贝从而造成的浅拷贝;
那为什么在这里使用memcpy时将会造成浅拷贝;
在模拟这些成员函数中,一般优先会想到的类型为内置类型,即语言标准指定,编译器自带的类型;
如果为vector< int >,vector< char >将可以使用memcpy进行拷贝;
但是vector这类的容器为一种类模板,对于类模板来说,其给的模板参数不一定一定就是内置类型,也有可能出现自定义类型;
就如使用vector< vector< int > >来说,最外层的模板参数为一个自定义类型,而内层的模板参数为一个内置类型int;

在这里插入图片描述
而如果在这里使用了memcpy进行原数据到新空间的拷贝将会怎么做;
在这里插入图片描述
表面上这里进行了拷贝,但实际上,进行了深拷贝的只有最外层;
对于内层而言只是使用了memcpy将对应的对象进行拷贝;
也就是说,这里出现了指针指向同一块空间的问题;

在这里插入图片描述
而若是在这种情况下则会出现重复析构的问题;


解决办法

在这种情况下只能摒弃以往的使用memcpy进行数据拷贝,并使用赋值进行拷贝;
以拷贝构造为例:

vector(const vector<T>& v){_start = new T[v.size()];for(size_t i = 0;i<v.size();++i){_start[i] = v._start[i];//若是自定义类型将会去调用它的赋值重载}_finish = _start + v.size();_end_of_storage = _start + v.capacity();
}
http://www.tj-hxxt.cn/news/33294.html

相关文章:

  • 如何建做校园购物网站重庆森林经典台词 凤梨罐头
  • 长沙做旅游网站多少钱电脑培训速成班多少钱
  • 重庆市最新疫情seo平台是什么
  • 网页前端开发和后端开发sem优化技巧
  • 福州有网站建设的公司免费广告投放平台
  • 电脑做系统哪个网站比较好百度地图排名怎么优化
  • 做网站建设有哪些公司好网站开发工具
  • 找公司做网站需要注意佛山网络推广平台
  • excel网站建设昭通网站seo
  • 苏州网站设计电话开封网站快速排名优化
  • 网站建设dream营销型网站方案
  • 网站备案 是域名还是空间广州网络推广外包
  • 个人可以做网站推广淘宝关键词工具
  • 网站 跑马灯图片怎么做下载百度app下载
  • 企业品牌网站建设费用百度查询关键词排名工具
  • 做网站的软件page信息流优化师
  • 做网站去哪里可以找高清的图片西安关键词排名首页
  • 免费ppt模板下载在哪里下载南宁seo排名首页
  • 正规网站建设公司在哪里免费个人网站空间
  • 库车县建设网站东莞网站设计排行榜
  • 做有网被视频网站吗crm网站
  • 如何进行网站建设seo网络推广哪家专业
  • 开个免费的网站多少钱网站老域名跳转到新域名
  • 德清网站建设中心天津seo公司
  • 蓝色系网站首页百度seo关键词排名技术
  • 艺术设计类网站深圳疫情最新情况
  • 网站自然优化自学北京培训seo哪个好
  • 网站PC关键词怎么做搜索词分析工具
  • 网站怎么使用模板seo推广哪家服务好
  • 天猫淘宝优惠券网站怎么做南京高端品牌网站建设