2016-05-31 203 views
-1

我想插入一個元素在一個向量,但它似乎我做錯了什麼。麻煩與vector.insert()

此處,我聲明向量:

std::vector<Dice> dicearray;

這是引發錯誤的行:

dicearray.insert(dicearray.size()-1 ,Dice());

而這些被拋出的錯誤:

Error (active) no instance of overloaded function "std::vector<_Ty, _Alloc>::insert [with _Ty=Dice, _Alloc=std::allocator<Dice>]" matches the argument list ConsoleApplication3 c:\Users\Miguel\Documents\Visual Studio 2015\Projects\ConsoleApplication3\ConsoleApplication3\ConsoleApplication3.cpp 60

Error C2664 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Dice>>> std::vector<Dice,std::allocator<_Ty>>::insert(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<Dice>>>,unsigned int,const _Ty &)': cannot convert argument 1 from 'unsigned int' to 'std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<Dice>>>' ConsoleApplication3 c:\users\miguel\documents\visual studio 2015\projects\consoleapplication3\consoleapplication3\consoleapplication3.cpp 60

任何想法,爲什麼發生這種情況?

+6

你爲什麼不使用'push_back'? – BeyelerStudios

+1

你使用的是什麼版本的C++?這是有效的前C + + 11 – NathanOliver

+0

我想在幾個位置添加元素,而不僅僅是最後一個。但這也可以解決這個問題。謝謝。 – Wazowski

回答

5

您需要提供一個迭代器到您想要插入的位置(請參閱參考:http://www.cplusplus.com/reference/vector/vector/insert/)。該錯誤基本上是說沒有函數需要這些類型的參數(數字,元素)。所以:

dicearray.insert(dicearray.end(), Dice()); // Insert element at the end (yes, without - 1) 

需要注意的是,如果在需要的位置已經是一個元素,從這個位置到結尾的所有元素都移動一個位置「向上」。

如果你只是想添加的元素,你可以使用push_back(然後你不指定位置,它插在最後一個位置):

dicearray.push_back(Dice()); 
+0

明白了,它現在有效。謝謝,沒有注意到它需要一個迭代器,而不是一個數字。謝謝。 – Wazowski