2017-02-25 3 views
1

Ich versuche, die Elemente eines Vektors (s1) in einen anderen Vektor (s2), an einem bestimmten Punkt einzufügen. Als Beispiel dieses mit dem ProgrammC++: Iterator aus Vektor zurückgeben :: einfügen

#include <vector> 
#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    vector<string> s1; 
    s1.push_back("Hi"); 
    s1.push_back("there!"); 

    vector<string> s2; 
    s2.push_back("How"); 
    s2.push_back("are"); 
    s2.push_back("you?"); 

    vector<string>::iterator it = s2.begin(); 
    s2.insert(it, s1.begin(), s1.end()); 

    return 0; 
} 

jedoch erreicht ist, wenn ich den Befehl insert den Iterator des ersten eingeführte Element zurückkehren wollen, war ich unter dem Eindruck, sollte dieser Befehl

arbeiten
it = s2.insert(it, s1.begin(), s1.end()); 

aber ich die Kompilierung-Fehlermeldung

vector_insert.cc:20:8: error: no match for ‘operator=’ (operand types are ‘std::vector<std::__cxx11::basic_string<char> >::iterator {aka __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >}’ and ‘void’) 
it = s2.insert(it, s1.begin(), s1.end()); 

Warum funktioniert der Compiler denken Einsatz eine Lücke Rückkehr hat, wenn diese Seite einen Iterator return (http://en.cppreference.com/w/cpp/container/vector/insert) zeigt . Beachten Sie, dass dieses Beispiel ist trivial, weil ich mit

it = s2.begin(); 

den Iterator auf das anfängliche eingeführte Element bekommen könnte, aber dies würde im Allgemeinen

Antwort

1

nicht wahr sein Der Akt des Schreibens meine Frage hat mir geholfen, finden Sie die Antwort (wie gewöhnlich). Ich würde die Frage der Nachwelt überlassen und sofort antworten.

Der Hinweis war genau dort in der cppreference Seite (duh). Die Leerimplementierung der Einfügefunktion existierte bis C++ 11; die Iterator-Implementierung seit C++ 11. Daher war das Problem nur mit meinem Compiler. Um das zu beheben, habe ich nur mit dem Flag -std = C++ 11 kompiliert:

g++ -std=c++11 -o vector_insert vector_insert.cc