2016-04-16 22 views
1

Jede Art Seele wissen, wie der folgende Code zu korrigierenEinfügen von Objekten in einer Liste

"d1.insert (d1.begin(), es [0]);" so das die Ausgabe wie folgt:

Programm läuft successfuly und Anzeige: 1 2 3 4 5 6 7 8 9 10

#include <list> 
#include <deque> 
#include <iostream> 

using namespace std; 

template<typename T> ostream & print(const T & start, const T & end) 
{ 
    T tmp = start; 
    for(; tmp != end; ++tmp) 
    { 
      cout<< *tmp<< " "; 
    } 
    return cout; 
} 
class A 
{ 
public: 
    int a; 
public: 
    A(int a):a(a) {} 
    A(const A & a) {} 
}; 

ostream & operator<<(ostream & c, const A & o) 
{ 
    c<<o.a; 
    return c; 
} 

int main() 
{ 
    int tab[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
    list<A> l1(tab, tab+10); 
    deque<A> d1; 
    list<A>::iterator it; 
    for(it = l1.begin(); it != l1.end(); ++it) 
    { 
      d1.insert(d1.begin(), it[0]); 
    } 
    print(d1.begin(), d1.end())<<endl; 
    return 0; 
} 
+1

Was ist das Problem? Zeigt es die Liste korrekt an oder nicht? Kannst du 'std :: copy' hier benutzen? – tadman

Antwort

2

Aus dem Code scheint, dass Sie auf eine std::deque einfügen wollen nicht a std::list (Sie haben die Array-Werte bereits in die Liste l1 eingefügt). Sie könnten nach dem gleichen Verfahren zum std::deque einzufügen:

int main(void) { 
    int tab[] = { 1,2,3,4,5,6,7,8,9,10 }; 
    std::list<int> l1(tab, tab + 10); 
    std::deque<int> d1(tab, tab + 10); 
} 

, wo ich einfach A als die früheren Aussehen von int hier ersetzt haben nur ein Wrapper für eine int zu sein.

Sie könnten alternativ dazu

int main(void) { 
    int tab[] = { 1,2,3,4,5,6,7,8,9,10 }; 
    std::list<int> l1(tab, tab + 10); 
    std::deque<int> d1; 

    auto it = d1.begin(); 
    d1.insert(it, l1.begin(), l1.end()); 
} 
1

Eine Alternative ist nur std::copy zu verwenden:

#include <algorithm> 
#include <iterator> 
//... 
std::copy(l1.begin(), l1.end(), std::back_inserter(d1)); 

Es andere Probleme mit Ihrem Code sind, sollten Sie korrigieren:

1) Entfernen Sie die leer A kopieren Konstruktor. Wenn Sie es leer machen, erstellen Sie A Kopien, die das a-Mitglied nicht kopieren.

2) Der Parameter für den Konstruktor A sollte sich vom Namen der Elementvariablen unterscheiden.

See the Live Example

Verwandte Themen