使用STL算法(尽可能多),例如remove_if()
和list::erase
,有一种很好的方法可以从定义如下的列表中删除重复项:
list<int> l;
请注意,list::unique()
仅当连续元素中出现重复时才有效.就我而言,无论在列表中的位置如何,都必须删除所有重复项.此外,删除重复意味着在最终结果中仅保留每个元素的一个副本.
编辑:l.sort()
后面的选项l.unique()
无法使用,因为这将破坏列表的顺序.
C++ 标准或 Boost 中是否有一个小函子包装另一个函子,但在调用该函子之前取消引用指针?
我在想这样的事情:
template<class F>
struct DerefCmp {
template<class T>
bool operator()(T* v) const {
return F(*v);
}
};
Run Code Online (Sandbox Code Playgroud)
例如,我会在指针容器中使用它,我想按值进行比较:
std::set<int*, DerefCmp< std::equal<int> > > s;
Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些数组操作.我在这里做char数组排序和重复删除.欢迎您的意见.尽管如此,还没有做过很多测试和错误处理.
#include<stdafx.h>
#include<stdlib.h>
#include<stdio.h>
#include<string>
using namespace std;
void sort(char *& arr)
{
char temp;
for(int i=0;i<strlen(arr);i++)
{
for(int j=i+1;j<strlen(arr);j++)
{
if(arr[i] > arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
bool ispresent(char *uniqueArr, char * arr)
{
bool isfound = false;
for(int i=0;i<strlen(arr);i++)
{
for(int j=0;j<=strlen(uniqueArr);j++)
{
if(arr[i]== uniqueArr[j])
{
isfound = true;
return isfound;
}
else
isfound = false;
}
}
return isfound;
}
char * removeduplicates(char *&arr)
{
char * …
Run Code Online (Sandbox Code Playgroud)