从数字数组中删除重复项 我试图C++编写一个程序,把一系列的数字输入到代码> A[]/COD>中,然后把这些数字输出到 B[] /Cord>中删除任何重复。例如,a[]={1,3,7,6,3,7}将输出b[]={1,3,7,6}。谢谢 int main() { int a[10]; int i, n, j; cout << "n="; cin >> n; for (i = 0; i <= n - 1; i++) { cout << "a[" << i << "]="; cin >> a[i]; } for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) { if (a[i] == a[j]) { cout << "b= " << a[i] << endl; } } } for (i = 0; i <= n; i++) { if (a[i] != a[j]) { cout << "b=" << a[i] << endl; } } } intmain(){ INTA[10]; int i,n,j; cout>n; 对于(i=0;i

从数字数组中删除重复项 我试图C++编写一个程序,把一系列的数字输入到代码> A[]/COD>中,然后把这些数字输出到 B[] /Cord>中删除任何重复。例如,a[]={1,3,7,6,3,7}将输出b[]={1,3,7,6}。谢谢 int main() { int a[10]; int i, n, j; cout << "n="; cin >> n; for (i = 0; i <= n - 1; i++) { cout << "a[" << i << "]="; cin >> a[i]; } for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) { if (a[i] == a[j]) { cout << "b= " << a[i] << endl; } } } for (i = 0; i <= n; i++) { if (a[i] != a[j]) { cout << "b=" << a[i] << endl; } } } intmain(){ INTA[10]; int i,n,j; cout>n; 对于(i=0;i,c++,C++,)如果您想删除重复(并保留顺序),那么C++的习惯用法是使用STD::SET和STD::vector(这里只显示一个相关的例子): 您的代码应更改为(在两个代码段中都不考虑数组的顺序): 使用std::unordered\u集跟踪已保留的元素。此外,使用std::vector代替C样式数组 vector<int> a{1, 3, 7, 6, 3, 7}, b; unordered_set<int> s; for(auto i : a) {

)如果您想删除重复(并保留顺序),那么C++的习惯用法是使用STD::SET和STD::vector(这里只显示一个相关的例子):


您的代码应更改为(在两个代码段中都不考虑数组的顺序):


使用
std::unordered\u集
跟踪已保留的元素。此外,使用
std::vector
代替C样式数组

vector<int> a{1, 3, 7, 6, 3, 7}, 
            b;
unordered_set<int> s;
for(auto i : a)
{
    if (s.insert(i).second)
    {
        b.push_back(i);
    }
}
向量a{1,3,7,6,3,7},
B
无序的集合;
用于(自动i:a)
{
如果(s.插入(i).第二条)
{
b、 推回(i);
}
}

有很多方法可以从vector中删除重复项

Oblivion
解决方案中,简单的方法是将它们插入到集合中,然后从集合中获取值

vector<int> a{1,3,7,6,3,7};
set<int> b(a.begin(), a.end());
for (auto& elem : b)
{
    std::cout<<elem<<'\n';
}

您好,请格式化代码以便我们阅读。您可以在编辑器中突出显示代码,然后使用
{}
图标缩进所有四个空格。这将使代码更清晰。保留第一次看到的顺序。很好。您应该使用
无序映射
,以便插入为O(1)而不是O(lg n)@0x499602D2,这是有争议的,并且取决于输入数据的典型大小:如果处理大的输入数据,
unordered_map
将开始增加碰撞键的存储桶,这将不可避免地降低O(1)的复杂性。
  for (i = 0; i < n; i++) {
    bool notDup = true;
    for (j = i + 1; j < n; j++) {
      if (a[i] == a[j]) {
          notDup = false;
          break;
      }
    }
    if(notDup)
        cout << "b= " << a[i] << endl;
  }
vector<int> a{1,3,7,6,3,7};
set<int> b(a.begin(), a.end());
for (auto& elem : b)
{
    std::cout<<elem<<'\n';
}
vector<int> a{1, 3, 7, 6, 3, 7}, 
            b;
unordered_set<int> s;
for(auto i : a)
{
    if (s.insert(i).second)
    {
        b.push_back(i);
    }
}
vector<int> a{1,3,7,6,3,7};
set<int> b(a.begin(), a.end());
for (auto& elem : b)
{
    std::cout<<elem<<'\n';
}
vector<int> a{1,3,7,6,3,7};
sort(a.begin(), a.end()); 
a.erase(unique(a.begin(), a.end()), a.end());