C++ list去重

0

上述程序的功能是在输入的一系列整数中删除给定的整数。参考及修改代码使得

(1) 使得该程序自动删除输入整数中所有重复的数据

即: 原始程序运行示例:

输入 10 9 5 4 2 5 7 9 6 3

请输入需要删除的整数: 5

运行结果:

10 9 4 2 7 9 6 3

修改后程序自动输出结果为:

10 9 5 4 2 7 6 3

有什么办法能在不改变序列的情况下去重的吗 谢谢!

#include <iostream>
#include <list>
using namespace std;
int main(void)
{
	list<int> Link;			// 构造一个列表用于存放整数链表
	int i, key, item;   
	for (i=0;i < 10;i++)	// 输入10个整数依次向表头插入
	{
		cin>>item;
		Link.push_front(item);
	}
	cout << "List: ";		// 输出链表
	list<int>::iterator p=Link.begin();		//迭代器P用于遍历链表
	while(p!=Link.end())	// 输出各节点数据,直到链表尾
	{
		cout <<*p << "  ";
		p++;				// 使P指向下一个节点
	}
	cout << endl;   
	cout << "请输入一个需要删除的整数: ";	// 输入需要删除的整数
	cin >> key;
	Link.remove(key);  
	cout << "List: ";		// 输出链表
	p=Link.begin();			// 使P重新指向表头
	while(p!=Link.end())	// 输出各节点数据,直到链表尾
	{
		cout <<*p << "  ";
		p++;				// 使P指向下一个节点
	}
	cout << endl;
	return 0;
}
ava
染梦

2021-10-23

0

要是没有直接的函数,那就自己写一个呗,例如:

//	Link.remove(key);

	p = Link.begin();			// 使 P 重新指向表头
	bool isfirst = true;
	while(p != Link.end())		// 输出各节点数据,直到链表尾
	{
		if (*p == key)
		{
			if (isfirst)
				isfirst = false;
			else
				Link.erase((p++)--);
		}

		p++;
	}
ava
慢羊羊

2021-10-24

0

考虑拷贝一份原序列并打上位置标记,然后按大小为第一关键字,位置为第二关键字排列,再跑一遍std::unique,最后根据位置复原序列即可。

ava
无名氏

2021-10-30

技术讨论社区
相关提问