2011-09-17 109 views
1

我想從std :: list有效地初始化一個std :: vector,但是我沒有任何運氣。使用迭代器從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); 

是正確的。

你第二個版本應該是

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

在這兩種情況下,我得到這個錯誤錯誤C2678:二進制「+」:沒有操作員發現這需要類型「性病的左側操作數::名單<_Ty> :: _Iterator <_Secure_validation>'(或者沒有可接受的轉換) –

+0

好的,原來這是我的錯。我將一個帶有偏移量(mylist.begin()+ 40)的std :: list迭代器傳遞給函數,這是罪魁禍首。否則,就像你說的那樣。感謝您的確認。 –

相關問題