2015-09-16 74 views
-1

輸入:從矢量中刪除所有重複值?

1 1 2 2 3 

所需的輸出:

3 

這裏是我的代碼:

#include <cstdio> 
#include <cstring> 
#include <string> 
#include <vector> 
#include <cmath> 
#include <cstdlib> 
#include <cassert> 
#include <iostream> 
using namespace std; 

int main(){ 
    vector<int> v; 
    vector<int>::iterator it; 
    // input variables 
    int input, a, arr[10000]; 
    // input 
    cin >> input; 
    // comment all your loops, etc 
    for(int i = 0; i < input ; i++){ 
     cin >> a; 
     arr[i] = a; 
     v.push_back(a); 
    } 

    for(int j = 0; j < input; j++){ 
     int ch1 = arr[j]; 
     for(int i = 0;i < input; i++){ 
     if(i == j){ 
     } 
     else{ 
      if(ch1 == arr[i]){ 
      v.erase(std::remove(v.begin(), v.end(), ch1),v.end()); 
      } 
      else{ 
      } 
     } 
     } 
    } 

    for(it = v.begin(); it != v.end(); it++){ 
     cout << *it; 
    } 

    return 0; 
} 

erase()不能在這裏工作。

我該如何解決這個問題?

+2

這不是一個調試服務。你的意思是你的擦除是「不工作」?同時格式化您的代碼。 – Barry

+1

首先,函數級的'''循環陰影'v'向量中的'v'計數器;這就是爲什麼'v.erase'不可訪問。第二,如果你被允許使用另一個容器,檢測是否有重複,那麼爲什麼不直接導出整個'的std ::矢量'成'的std ::設置'一邊看每個插入的結果,並添加所有檢測到的複製另一個'的std ::設置',最後導出第一套回'的std ::矢量'除了在第二'的std ::設置'值? –

+0

您沒有使用_STL_,我刪除了標籤。閱讀[tag:stl]的[tag wiki](http://stackoverflow.com/tags/stl/info),它並不是指你認爲它實際上是什麼! –

回答

1

您的問題是你定義一個名爲V的兩個變量。

vector<int>v; 
for(int v=0... 

所以你基本上是隱藏自己的向量中的int和編譯器試圖調用擦除()爲int,它給你的錯誤。

只需更改其中一個變量的名稱即可。

+0

這是另一個同名的變量嗎? – Ziezi