如何使用std :: vector.insert()?

时间:2015-12-23 08:37:39

标签: c++ stdvector

所以,我试图学习如何使用std::vectors,但我遇到了问题:

std::vector<Box>entities;

entities.insert(1, Box(&world, b2Vec2(Camera.getCenter().x, Camera.getCenter().y), b2Vec2(25, 25), 0, sf::Color::Red, b2_dynamicBody, 1.0f, 0.3));

为什么这不起作用?它给了我以下错误:

Error no instace of overloaded function "std::vector<_Ty, _alloc>::insert [with _Ty=Box, _Alloc=std::allocator<Box>] matches the argument list. Argument types are (int, Box). Object type is std::vector<Box, std::allocator<Box>>

我做错了什么?

4 个答案:

答案 0 :(得分:3)

第一个参数应该是迭代器,而不是索引。您可以使用entities.begin() + 1获取位置1的迭代器。

请注意,位置1是向量中第二个元素的位置:向量索引是从零开始

答案 1 :(得分:1)

第一个参数错误。您应该指定迭代器,而不是索引。

entities.insert(entities.begin() + i, theItem);

其中i是您要插入的位置。请注意,向量必须至少为i的大小。

答案 2 :(得分:1)

entities.insert(entities.begin(), /*other stuff as before*/会在向量的开头插入。 (即第零元素)。请记住,vector索引是从零开始的。

entities.insert(1 + entities.begin(), /*other stuff as before*/将插入第二个位置。

答案 3 :(得分:1)

方法2014-12-23T08:46:00的所有重载版本都要求第一个参数的类型insert应用于矢量定义。此迭代器指定必须插入新元素的位置。

但是传入的是整数值1而不是迭代器

std::vector<Box>::const_iterator

没有从entities.insert(1, ^^^ Box(&world, b2Vec2(Camera.getCenter().x, Camera.getCenter().y), b2Vec2(25, 25), 0, sf::Color::Red, b2_dynamicBody, 1.0f, 0.3)); 类型的对象到类型为int的对象的隐式转换。所以编译器发出错误。

也许你的意思是以下

std::vector<Box>::const_iterator

或者如果您的编译器不支持函数#include <vector> #include <iterator> //... entities.insert( std::next( entities.begin() ), ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Box(&world, b2Vec2(Camera.getCenter().x, Camera.getCenter().y), b2Vec2(25, 25), 0, sf::Color::Red, b2_dynamicBody, 1.0f, 0.3)); ,那么您可以jjust write

std::next