如何删除数组c ++中的副本

时间:2014-12-27 10:05:18

标签: c++ arrays duplicate-removal

我需要删除数组中的重复元素。
这是我的代码:

struct client{
int index;
string name;
string surname;
string city;
int year;
float sell;};

client * elimina(client array[], int &n){
int j=0;
int i;
int a=0;
int trovato=0;
client *vet;
for(i=0; i<n; i++){
    vet=new client[a+1];
    for(j=0;j<a;j++){
        if(array[i].index==vet[j].index){
            trovato=1;

            break;}}

    if(trovato==0){
        vet[a]=array[i];
        a++;}
    trovato=0;}
    n=a;
    return vet;
}

代码可以工作但是数组屏幕上的输出是

    11-12181452000000000000000000000000000000010334500

1 个答案:

答案 0 :(得分:0)

我认为这不是很有效率。你应该排序你的 数组,然后重复将是相邻的,它是很多 更快删除它们。

使用相关的C ++标准数据结构和函数。首先,定义排序 您的客户的标准:

bool operator<(client const& c1, client const& c2)
{ return c1.index < c2.index; }

您的功能变得更加简单:

std::vector<client> elimina(std::vector<client> v) {
    // Sort on index so that std::unique can find all duplicates
    std::sort(v.begin(), v.end());
    // Shift duplicates
    auto const last = std::unique(v.begin(), v.end());
    // Resize the vector so duplicates drop out
    v.resize(last - v.begin());
    return v;
}

您需要包含“向量”和“算法”标题。

请注意auto的使用,它仅适用于2011版的C ++(C ++ 11)。 在早期版本中,它将是std :: vector :: iterator。

请参阅http://en.cppreference.com/w/cpp/algorithm/unique处的标准参考 详情。