1.线性表的源码实现虽然不能有stl那样的方便(还有个小错误)

或许你可以先看看effective cpp这几本书,我想那对于初学cpp完基本很有帮助。或者说c到cpp

当然我没看过c,学了cpp也没两天, 还会使那句话,all 一切和语言无所关系,狗来认真的话,学俩天也会了。

1顺序表的类成员以及一些接口(可以初学者好好理解一下)

template<class T>
class selfArray
{
private:T* datas;
	   int size;
	   int the_most_size;
public:selfArray();
	  selfArray(int themost);
	  ~selfArray();
	  void push_back(int i,T value);
	  void testthemost();
	  void pop(int i);
	  void update(int i, T value);
	  int finddata(int i);
	  int findindex(T value);
	  void print();
	  int findsize();
	  int The_most_size();
	  void changethe_most(int most_size,mostsize i);
};

这是我写的一些接口;

一个简单容器应该有它的数量和最大数量

用水桶很好去理解 水桶的大小和它装的水;

首先是他的构造和析构函数

你该好好了解一下作用域 使用内存 释放内存;当然这些和本文来说都是废话。

 可以自己重载一些接口这是cpp很好的特性我都感觉。

如果你调用上面的接口我会默认有一个空位吗,emmm我觉得这里我写的有些不好。

然后有参树则是有你自己操控这个水桶的大小(上文举例)如果你不能很自由切换这个概念,那最好不要用这个想法。 

如你所见,这是一个扩容机制,当你的桶满了 就需要扩大你的桶,好好理解new 很重要

然后将数据赋值过去,再将原来地址删除,指针在这里显得很重要,好好去看指针篇把那有一张图会让你理解很棒(欧,至少我那么认为) 这里出现了一些警告,当然我不觉得是我的问题。

template<class T>
void selfArray<T>::push_back(int i, T value)
{
	
	if (i<0 || i>size)
	{
		throw   "the failing to add data" ;
	}
	else
	{
		size++;
		testthemost();
		for (int j = size; j > i; --j)
		{
			datas[j] = datas[j] - 1;
		}
		datas[i] = value;
	}
}

 一个加结点的接口。

这样做一个边界判断,如果下表溢出会抛出一个error。显然代码很清楚可以看出

没什么好讲其实细心会发现整体就有点错误,那是我没好好考虑,你可以把错的地方评论区说出来哈哈哈哈哈哈

template<class T>
void selfArray<T>::pop(int i)
{
	if (i <= 0 || i>size)
	{
		throw "the failing to delete data" ;
	}
	else {
		size--;
		for (int j = i; j < size; ++j)
		{
			datas[j] = datas[j + 1];
		}
		datas[size] = 0;
	}
}

一个删除结点的接口,

void selfArray<T>::update(int i, T value)
{
	if (i<=0 || i>size)
	{
		throw  "the failing to find data" ;
	}
	datas[i] = value;
}
template<class T>
int selfArray<T>::finddata(int i)
{
	if (i <= 0 || i > size)
	{
		throw "the failing to find data";
	}
	return datas[i];
}
template<class T>
int selfArray<T>::findindex(T value)
{
	for (int i = 0; i < size; i++)
	{
		if (datas[i] == value)
		{
			return i;
		}
		else
		{
			cout << "there is not have data in Array" << endl;
		}
	}
}

替换 查找   ,这一切都不需要解释。

template<class T>
void selfArray<T>::print()
{
	for (int i = 0; i < size; ++i)
	{
		cout << "num" + to_string(i) + ":" << datas[i] << " ";
	}
	cout << endl;
}

在控制台上打印  

对于很多初学者来说会很纠结那些为什么不能在电脑上花里胡哨。

但是其实没必要 即便是图形学

比较难处理的还是逻辑 

渲染难只不过逻辑处理难

实际你 只要有些好的gui库 easyx不是一个好的或者说line 只接受整数型变量这很难说清楚。

但你不用太纠结gui库,对于接口你只要知道你给什么参数有什么作用,cpu给显卡的指令不需要你怎么了解。扯远了,shit

template<class T>
void check(selfArray<T>&m1,int i,T value=0,typed x=add)
{
	switch (x)
	{
	case typed::add:try { m1.push_back(i, value); }
				   catch (const char* msg) { cerr << msg << endl; };
				   break;
	case typed::deleted:try { m1.pop(i); }
					   catch (const char* msg) { cerr << msg << endl; };
					   break;
	case typed::finded:try { m1.finddata(i); }
					  catch (const char* msg) { cerr << msg << endl; };
					  break;
	default:try { m1.update(i, value); }
			catch (const char* msg) { cerr << msg << endl; };
			break;
	}
}

template<class T>
void selfArray<T>::changethe_most(int most_size,mostsize i)
{
	if (i == mostsize::yes)
	{
		T* newdata = new T[most_size];
		for (int i = 0; i < most_size; ++i)
		{
			newdata[i] = datas[i];
		}
		T* temp = datas;
		datas = newdata;
		delete temp;
	}
	else if (i==mostsize::no)
	{
		T* temp = datas;
		datas = new T[most_size];
		delete temp;
	}
}
enum typed
{
	add=0,
	deleted=1 ,
	finded=2 ,
	updated=3,
};
enum class mostsize {
	yes,
	no,
};

  这里我想说封装函数很能体现

emmm不知道怎么表达。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值