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];