《大话数据结构》——3.1顺序表相关操作

最近开始学习《大话数据结构》这本书,准备把里面的范例用C++敲一敲,以备后续复习,目前还是很菜很菜,尽量把子函数写清楚,主函数可能就考虑的不是那么周到了。

#include <iostream>
using namespace std;
#include<vector>
#include<algorithm>

class myList
{
public:
	 myList(int len);//初始化操作:构造函数
	 ~myList()//析构函数
	 {
		 m_v.clear(); 
	 }
	bool isEmpty();//判断线性表是否为空
	void clearL();//将线性表清空
	int getE(int pos);//将第pos个位置的元素返回给e
	int findE(int e);//查找是否存在给定元素e
	void insertE(int pos, int e);//在第pos个位置插入元素e
	int deleteE(int pos);//删除第pos个位置元素e
	int lengthL();//求线性表L中元素的个数
	void show();//输出元素
private:
	vector<int> m_v;
};

bool myList::isEmpty()//判断线性表是否为空
{
	return m_v.empty();
}
void myList::clearL()//将线性表清空
{
	m_v.clear();
	cout << "表中元素已清空" << endl;
}
int myList::getE(int pos)//将第pos个位置的元素返回给e
{
	if (pos < m_v.size())
	{
		return m_v[pos - 1];
	}
	else
		return false;
}
//int myList::findE(int e)//查找是否存在给定元素e
//{
//	for (int pos=0; pos< m_v.size(); pos++)
//	{
//		if (m_v[pos] == e)
//			return pos;
//		else
//			return false;
//	}
//}
void myList::insertE(int pos, int e)//在第pos个位置插入元素e
{
	if (pos < m_v.size())
	{
		m_v.insert(m_v.begin()+pos, e);
	}
	else
	{
		m_v.resize(pos);
		m_v[pos-1]=e;
	}
}
int myList::deleteE(int pos)//删除第pos个位置元素
{
	if (pos >= m_v.size())
	{
		return false;
	}
	else
	{
		m_v.erase(m_v.begin() + pos);
	}
	return true;
}
int myList::lengthL()//求线性表L中元素的个数
{
	return m_v.size();
}

myList::myList(int len)//初始化操作:构造函数
{
	m_v.reserve(len);
	cout << "请输入需要存储的元素:" << endl;
	int e;
	for (int i = 0; i != len; i++)
	{
		cin >> e;
		m_v.push_back(e);
	}
}

void myList::show()
{
	cout << "输出当前容器所有元素:" << endl;
	for (vector<int>::iterator vi = m_v.begin(); vi != m_v.end(); vi++)
	{
		cout << (*vi) << " ";
	}
	cout << endl;
}
int main()
{
	cout << "请输入当前需要存储元素的个数:"<<endl;
	int num = 0;
	cin >> num;
	myList L(num);
	L.show();

	cout << "当前表中元素个数为:" << L.lengthL() << endl;
	cout << "请输入要插入的元素:" << endl;
	int e;
	cin >> e;
	cout << "请输入要插入的元素位置:" << endl;
	int pos;
	cin >> pos;
	L.insertE(pos, e);
	L.show();
	L.clearL();

	system("pause");
	return 0;
}

反思:我的STL容器那些函数用的也太菜了,作用域外写子函数写的一塌糊涂。
对比参考版本1

  • 滥用 return true;return false;一般这种函数类型必须是bool类型,如果是int型只能return 0;
  • unsignedint灵活使用,对于取值最小就为0的整数,应该准备使用 unsigned而不是int
  • 关于const的使用赶紧翻看一下《effective C++》
  • inline内联函数,通常函数体只有一行的时候,且无循环无调用别的函数时候使用,具体用法见inline用法

参考版本2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值