2016-04-16 14 views
1

次のコードを修正するには、どのような魂も分かります。オブジェクトをリストに挿入

"d1.insert(d1.begin()、it [0]);"その出力は以下の通りです:

プログラムがsuccessfuly実行され、ディスプレイ: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

どうしたのですか?リストを正しく表示するかどうかここで 'std :: copy'を使用できますか? – tadman

答えて

2

それはあなたがstd::dequeないように挿入したいコードかららしいですa std::list(すでに配列値をリストl1に挿入しています)。あなたはstd::dequeに挿入するために、同じ手順に従ってくださいことができます:私は単に旧ルックスとして、ここでintAを交換した

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); 
} 

だけintのラッパーであることを。

代わりにあなたが行うことができ、

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

代替だけでstd::copyを使用することです:

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

あなたは修正する必要があなたのコードと他の問題があります。

1)削除空のAコピーコンストラクタ。それを空にすると、Aのコピーが作成され、aのメンバーはコピーされません。

2)Aコンストラクタのパラメータは、メンバ変数の名前と異なる必要があります。

See the Live Example

関連する問題