顺序表ADT模板简单应用算法设计:删除顺序表中的冗余元素
问题描述
目的:使用STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。
应用3:试设计一个算法,删除顺序表L中的冗余元素,即使得操作之后的顺序表中只保留操作之前表中所有值都不相同的元素(提纯)。
参考函数原型:
template<class ElemTyp
void Purge_Sq( vector<ElemType> &L );
输入说明
第一行:待处理顺序表的长度
第二行:待处理顺序表的数据元素(数据元素之间以空格分隔)
输出说明
第一行:待处理顺序表的遍历结果
第二行:提纯结果
(输入与输出之间以空行分隔)
输入范例
10
13 5 13 9 32 51 76 5 9 8
输出范例
13 5 13 9 32 51 76 5 9 8
13 5 9 32 51 76 8
思路分析
- 双层遍历
- 最外层:遍历所有的元素
- 内层:遍历当前元素之后所有的元素,查看是否与当前元素相同
- 相同删除
代码实现
#include <vector>
#include <iostream>
using namespace std;
/*
description:show all the elements of the vector
*/
template<class Elemtype>
void show(vector<Elemtype>& A)
{
typename std::vector<Elemtype> test = A;
typename std::vector<Elemtype>::iterator iter;
for(iter = test.begin();iter != test.end();iter ++)
{
cout<<*iter<<" ";
}
cout<<endl;
}
/*
description:
*/
template<class Elemtype>
void Purge_Sq(vector<Elemtype> &L)
{
show(L);
for(int i = 0 ;i < L.size() - 1;i ++)
{
for(int j = i + 1;j < L.size(); j++)
{
if(L.at(i) == L.at(j))
{
L.erase(L.begin() + j);
}
}
}
cout<<endl;
show(L);
}
int main()
{
int Asize;
cin>>Asize;
vector<string> A(Asize);
string str;
for(int i = 0 ;i < Asize;i ++)
{
cin>>str;
A.at(i) = str;
}
Purge_Sq(A);
return 0;
}
分析与总结
- vector中的erase方法,单独删除一个元素的时候,形参仅仅为向量的迭代器,不是整型的索引。