我需要删除数组中的重复元素。
这是我的代码:
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
答案 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处的标准参考 详情。