C++之去重

note

今天刷题,忘了去重复库函数,于是手写了一个。 前提: 必须保证数组是有序的。

源码

template <typename T>
void unique_arr(T arr[], int len, T* parr, int& out_len)
{
	if (1 > len || nullptr == parr || NULL == parr)
		return;

	int cur_index = 0;
	int pre_index = 0;
	int real_len = 1;

	parr[0] = arr[0];

	while (cur_index < len)
	{
		if (arr[pre_index] != arr[++cur_index])
		{
			pre_index = cur_index;
			parr[real_len++] = arr[cur_index];
		}
	}

	out_len = real_len;
}

调用

	int arr2[10] = { 0 };
	int real_len = 0;

	int arr[] = { 5, 1, 3, 2, 3, 4, 4, 2, 1, 6 };
	// 排序
	std::sort(std::begin(arr), std::end(arr));
	// 去重复
	unique_arr(arr, 10, arr2, real_len);

	// 输出
	for (int i = 0; i < real_len - 1; ++i)
		std::cout << "  " << arr2[i];
posted @ 2020-12-23 12:57  mohist  阅读(1061)  评论(0编辑  收藏  举报