2011-09-17 9 views
1

std :: vectorをstd :: listから効率的に初期化しようとしていますが、うまくいきません。イテレータを使用してstd :: listからstd :: vectorを初期化します。

例えば、それはこのような何かしたいと思います:

void myFunc(std::list<double>::iterator begin, std::list<double>::iterator end) 
{ 
    std::vector <double> data(begin, end); 
    // or 
    std::vector <double> data; 
    data::insert(data.begin(), data.end()); 
} 

コンテナが唯一、自分のイテレータ型をサポートするように見えるので、これが動作しませんか?何か不足していますか?私が達成しようとしていることは容易に可能ではないのですか?

答えて

1

あなたの最初のバージョン

std::vector<double> data(begin, end); 

は正しいです。

あなたは番目のバージョンは、私は、このエラーエラーC2678を取得し、両方のケースで

std::vector<double> data; 
data.insert(data.begin(), begin, end); 
+0

する必要があります:バイナリ「+」:なしオペレータはタイプ「STDの左側のオペランド::リスト<_Ty>をとる見つからなかっ:: _Iterator <_Secure_validation> '(または許容される変換はありません) –

+0

OK、これは私のせいでした。私はstd :: listイテレータをオフセット(mylist.begin()+ 40)で関数に渡していましたが、それが原因です。あなたが言ったように、それは別の方法で動作します。確認していただきありがとうございます。 –

関連する問題