2024年C++面向对象思维刷题_c++思维训练,2024年最新农民工看完都学会了

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

using namespace std;

MergeOverlapBlock::MergeOverlapBlock()
{
}

MergeOverlapBlock::~MergeOverlapBlock()
{
}

bool lessFunc(const stBlock& st_fir, const stBlock& st_sec)
{
if (st_fir.i_first < st_sec.i_first)//注意细节,只能写小于,不能写小于等于,否则相同时会奔溃
{
return false;
}
else
{
return true;
}
}
void MergeOverlapBlock::mergeFunc(const vector& vc_BlockSrc, vector& vc_BlockDest)
{
vector vc_BlockTemp = vc_BlockSrc;
sort(vc_BlockTemp.begin(), vc_BlockTemp.end(), lessFunc);

int i_length = vc_BlockSrc.size();
if (i_length <= 0)
{
	return;
}
stBlock st_blockRet;
int i_first = vc_BlockSrc[0].i_first;
int i_last = vc_BlockSrc[0].i_last;
for (int i = 1; i < i_length; i++)
{
	//表示有合并区间 并且是第一个区间头合到第二个区间尾、还有个包含关系则i\_last不用变化
	if (i_last >= vc_BlockSrc[i].i_first && i_last <= vc_BlockSrc[i].i_last)
	{
		i_last = vc_BlockSrc[i].i_last;
	}
	else if (i_last < vc_BlockSrc[i].i_first)//则表示这个区间与后面的区间没有关系了,则需要记录移动
	{
		st_blockRet.i_first = i_first;//记录
		st_blockRet.i_last = i_last;
		vc_BlockDest.push\_back(st_blockRet);
		i_first = vc_BlockSrc[i].i_first;//移动
		i_last = vc_BlockSrc[i].i_last;
	}
}
//还有最后一个没有记录的
st_blockRet.i_first = i_first;//记录
st_blockRet.i_last = i_last;
vc_BlockDest.push\_back(st_blockRet);
return ;

}


第三题代码



#pragma once

#define MaxCanpatin 5
/*
3、自定义vector实现动态数组
*/
template
class Myvector
{
public:
Myvector();
~Myvector();
Myvector(const Myvector& myVcCopy);//拷贝构造
bool push_back(const T& elem);//存取操作
const T& getElem(int i_posion);
const T& operator[](int i_posion);
const Myvector& operator=(const Myvector& left);
int get_icaptial();
int get_ielemCnt();
private:
T* p_memery;
int m_icaptial;
int m_ielemCnt;
};
template
const Myvector& Myvector::operator=(const Myvector& left)
{
p_memery = new left[myVcCopy.m_icaptial];
if (p_memery == NULL)
{
exit(-1);
}
for (int i = 0; i < left.m_ielemCnt; i++)
{
//如果T本身涉及深拷贝,则需要T自己重写=运算符操作函数
p_memery[i] = left.p_memery[i];
}
m_icaptial = left.m_icaptial;
m_ielemCnt = left.m_ielemCnt;
return *this;
}
template
int Myvector::get_icaptial()
{
return m_icaptial;
}
template
int Myvector::get_ielemCnt()
{
return m_ielemCnt;
}

template
const T& Myvector::operator[](int i_posion)
{
if (i_posion > m_ielemCnt)
{
return NULL;
}
return p_memery[i_posion];
}

template
const T& Myvector::getElem(int i_posion)
{
if (i_posion > m_ielemCnt)
{
return NULL;
}
return p_memery[i_posion];
}

template
bool Myvector::push_back(const T& elem)
{
//考虑扩容
if ((m_ielemCnt + 1) > m_icaptial)
{
T* p_memeryTemp = new T[m_icaptial * 2];
if (p_memeryTemp == NULL)
{
return false;
}
for (int i = 0; i < m_ielemCnt; i++)
{
//如果T本身涉及深拷贝,则需要T自己重写=运算符操作函数
p_memeryTemp[i] = this->p_memery[i];
}
delete[] p_memery;
p_memery = p_memeryTemp;
m_icaptial = m_icaptial * 2;
}
p_memery[m_ielemCnt++] = elem;
return true;
}

template
Myvector::Myvector(const Myvector& myVcCopy)
{
p_memery = new T1[myVcCopy.m_icaptial];
if (p_memery == NULL)
{
exit(-1);
}
for (int i = 0; i < myVcCopy.m_ielemCnt; i++)
{
//如果T本身涉及深拷贝,则需要T自己重写=运算符操作函数
p_memery[i] = myVcCopy.p_memery[i];
}
m_icaptial = myVcCopy.m_icaptial;
m_ielemCnt = myVcCopy.m_ielemCnt;
}

template
Myvector::Myvector()
{
p_memery = new T[MaxCanpatin];//C++尽量使用new 而不是malloc 考虑T传入的类型是自定义类类型
if (p_memery == NULL)
{
exit(-1);
}
m_icaptial = MaxCanpatin;
m_ielemCnt = 0;
}

template
Myvector::~Myvector()
{
delete[] p_memery;
p_memery = NULL;
}


测试main函数代码



#include
#include
#include “MergeSZ.h”
#include “MergeOverlapBlock.h”
#include “Myvector.h”
using namespace std;

int main()
{
/* 第一题
MergeSZ mergeSz;
/*int s1[5] = { 8, 5, 4, 1, 0};
int s2[3] = { 9, 6, 2};
int s3[8];
string s1[5] = { “992e22”, “982e2”, “9e30”, “900”, “80” };//string类型实现按字节长度排序,其他直接比较<排序
string s2[3] = { “99e94”, “92r1”, “7” };
string s3[8];
mergeSz.mergefunc(s1, 5, s2, 3, s3);
for (int i = 0; i < 8; i++)
{
cout << s3[i] << endl;
}
*/
/* 第二题
stBlock stBlock1 = { 1, 3 };
stBlock stBlock2 = { 2, 6 };
stBlock stBlock3 = { 15, 18 };
stBlock stBlock4 = { 8, 10 };
vector vc_stBlockSrc;
vc_stBlockSrc.push_back(stBlock1);
vc_stBlockSrc.push_back(stBlock2);
vc_stBlockSrc.push_back(stBlock3);
vc_stBlockSrc.push_back(stBlock4);
vector vc_stBlockDest;
MergeOverlapBlock merOver;
merOver.mergeFunc(vc_stBlockSrc, vc_stBlockDest);
int i_length = vc_stBlockDest.size();
for (int i = 0; i < i_length; i++)
{
cout << vc_stBlockDest[i].i_first << “-” << vc_stBlockDest[i].i_last << endl;
}
*/

Myvector<int> myvector;
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
cout << "icaptial = " << myvector.get\_icaptial() << endl;
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
myvector.push\_back(10);
cout << "icaptial = " << myvector.get\_icaptial() << endl;
cout << "ielemCnt = " << myvector.get\_ielemCnt() << endl;
cout << "Elem(5) = " << myvector.getElem(5) << endl;
//Myvector<int> myvectorCopy(myvector);
Myvector<int> myvectorCopy = myvector;
int i_size = myvectorCopy.get\_ielemCnt();
for (int i = 0; i < i_size; i++)
	cout << myvectorCopy[i] << endl;

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

l;

[外链图片转存中…(img-r0fiLIHT-1715569971231)]
[外链图片转存中…(img-B951RODT-1715569971232)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值