cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据

cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据
unique(b,e),删除连续性的,删除重复的数据,比如如果有两个连续的5,5,则留下一个。
unique(b,e,p)
unique_copy(b1,e1,b2)
unique_copy(b1,e1,b2,p)
    copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter

删除性算法

注意:
  1.应该有一个unique_if(),但是没有
  2.应该有一个unique_copy_if(),但是没有

  STL算法都是针对容器使用的。
   error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
   vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可

/*cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据
unique(b,e),删除连续性的,删除重复的数据,比如如果有两个连续的5,5,则留下一个。
unique(b,e,p)
unique_copy(b1,e1,b2)
unique_copy(b1,e1,b2,p)
	copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter

删除性算法

注意:
  1.应该有一个unique_if(),但是没有
  2.应该有一个unique_copy_if(),但是没有

  STL算法都是针对容器使用的。
   error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
   vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可
*/

#include <iostream>
#include <algorithm>
#include <functional>
#include <iterator>
#include <list>

using namespace std;

template <typename TT2>
void print(TT2 &ilist)
{
	for (TT2::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
		cout << *iter << ' ';
	cout << endl;
}
bool differenceOne(int elem1, int elem2)//前一个比后一个大1或者小于1
{
	return elem1 + 1 == elem2 || elem1 - 1 == elem2;
}

int main()
{
	int source[] = {1,4,4,6,1,2,2,3,1,6,6,6,5,7,5,4,4};
	int sourceNum = sizeof(source) / sizeof(source[0]);
	list<int> ilist;
	copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter
	print(ilist);

	cout << "删除连续重复的数据,只留下一个" << endl;
	list<int>::iterator pos;
	pos=unique(ilist.begin(), ilist.end());//返回的是迭代器的位置,定位在删除后的位置的下一个位置。
	for (list<int>::iterator iter = ilist.begin(); iter != pos; ++iter)
		cout << *iter << ' ';
	cout << endl;
	cout << "删除前:" << endl;

	copy(source, source + sourceNum, ilist.begin());
	print(ilist);

	// 3,2,5,7,6,
	//3比2大,把2删除,剩余:3,5,7,6
	//3,5,比较,5大不作处理。
	//5,7,不作处理
	//7,6,把6删除。
	//剩余3,5,7

//cout << "这里的greater<>(),作用是如果前面的数比后面的数大,则删除后面的数" << endl;
	pos = unique(ilist.begin(), ilist.end(), greater<int>());

	cout << "删除后:" << endl;
	for (list<int>::iterator iter = ilist.begin(); iter != pos; ++iter)
		cout << *iter << ' ';
	cout << endl;

	copy(source, source + sourceNum, ilist.begin());
	print(ilist);
	cout << "使用unique_copy:" << endl;
	unique_copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "));
	cout << endl;

	cout << "前一个比后一个大1或者小于1,就删除后面的一个数" << endl;
    unique_copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "), differenceOne);


	return 0;
}
发布了469 篇原创文章 · 获赞 211 · 访问量 95万+

猜你喜欢

转载自blog.csdn.net/txwtech/article/details/104498671
今日推荐