最近开始学习《大话数据结构》这本书,准备把里面的范例用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;
unsigned
与int
灵活使用,对于取值最小就为0的整数,应该准备使用unsigned
而不是int
- 关于
const
的使用赶紧翻看一下《effective C++》 inline
内联函数,通常函数体只有一行的时候,且无循环无调用别的函数时候使用,具体用法见inline用法