Estoy haciendo una función que toma un vector, lo clasifica y luego usa único para eliminar los duplicados, pero hay un error al escribir único que la variable "end_unique" no tiene tipo de datos. No se que debo hacer. ¡¡¡por favor ayuda!!!

   #include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
void elidup(vector<string> &w)
{
     // sort function is used to place words alphabetically so that after that we can find duplicates
     sort(w.begin(), w.end());
     // unique helps rearrange the input to "eliminate" adjacent duplicate entries
     auto end_unique = unique(w.begin(), w.end());
     // erase is used to eliminate unused elements
     w.erase(end_unique, w.end());
}
int main()
{
    string inp;
    cout<<" Enter the vector in which duplicates are to be found. Input * to indicate that it is the end of the string"<<endl;
    vector<string> word;
    while(inp != "*")
    // loop to enter the information in the vector
        {
            cin>>inp;
            word.push_back(inp);
        }
    if(inp == "*")
    // for erasing the duplicates and then print the vector
    {
        elidup(word);
        for(int i = 0 ; i<(word.size() -1);i++)
            cout<<word[i]<<" " ;
    }
    return 0;
}

Esto es lo que dice la pantalla de compilación

||=== Build file: "no target" in "no project" (compiler: unknown) ===|
C:\Users\admin\Desktop\Dhairya\522031-10-9E.cpp||In function `void elidup(std::vector<std::string, std::allocator<std::string> >&)':|
C:\Users\admin\Desktop\Dhairya\522031-10-9E.cpp|11|error: ISO C++ forbids declaration of `end_unique' with no type|
C:\Users\admin\Desktop\Dhairya\522031-10-9E.cpp|11|error: cannot convert `__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >' to `int' in initialization|
C:\Users\admin\Desktop\Dhairya\522031-10-9E.cpp|13|error: no matching function for call to `std::vector<std::string, std::allocator<std::string> >::erase(int&, __gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >)'|
C:\Dev-Cpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\c++\3.4.2\bits\vector.tcc|108|note: candidates are: typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >) [with _Tp = std::string, _Alloc = std::allocator<std::string>]|
C:\Dev-Cpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\c++\3.4.2\bits\vector.tcc|120|note:                 typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, __gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >) [with _Tp = std::string, _Alloc = std::allocator<std::string>]|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
0
fleshbender 3 dic. 2016 a las 15:02
2
¿Puede editar su pregunta para incluir el resultado de la compilación completo ? Completo, sin editar y con posibles notas informativas.
 – 
Some programmer dude
3 dic. 2016 a las 15:04
Utilicé los bloques de código 16.01 y fui a la configuración >> compiladores y en los compiladores de gcc verifiqué lo siguiente:
 – 
fleshbender
3 dic. 2016 a las 15:14
Hacer que g ++ siga c ++ 0x ISO c ++
 – 
fleshbender
3 dic. 2016 a las 15:15
4
Está intentando compilar C ++ 14 con una versión de compilador de 2004. Eso no puede funcionar, necesita actualizar.
 – 
Baum mit Augen
3 dic. 2016 a las 15:44

1 respuesta

La mejor respuesta

Acabo de comprobar su código: versión simplificada en aquí, una versión web del compilador de C ++. ¡Simplemente funcionó usando C ++ 14! Entonces, ¿cuál es tu problema en realidad? También puedes reemplazar estas dos líneas

// unique helps rearrange the input to "eliminate" adjacent duplicate entries
auto end_unique = unique(w.begin(), w.end());
// erase is used to eliminate unused elements
w.erase(end_unique, w.end());

Por esta única línea:

w.erase(unique(w.begin(), w.end()), w.end());

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
void elidup(vector<string> &words)
{
     // sort function is used to place words alphabetically so that after that we can find duplicates
     sort(words.begin(), words.end());
     // unique helps rearrange the input to "eliminate" adjacent duplicate entries
     auto end_unique = unique(words.begin(), words.end());
     // erase is used to eliminate unused elements
     words.erase(end_unique, words.end());
}
int main()
{
    vector<string> words{"ab", "cd", "ab", "cd"};
    elidup(words);
    for(auto w: words) cout<<w<<endl;
    return 0;
}
0
Hearen 3 dic. 2016 a las 16:00