从int向量中删除int的问题

时间:2018-02-09 04:06:57

标签: c++ vector int erase const-iterator

我的目标是拥有一个庞大的全球弹道对象矢量来跟踪当前活动的每个射击/子弹/导弹。但是,我还需要每个瓦片知道哪个弹道对象正好在它上面(出于渲染目的),所以我试图让每个瓦片都有一个小的向量向量,每个瓦片都是更大的BallistsVector的索引来描述在任何给定的框架上哪些都高于它

我的问题是我试图从一个int的向量中删除一个int,但是我一直在这样做:

enum FooExtended {
    case bar(baz: String)
    case baz(bar: String)
    case fuzz(Int)

    init(withFoo foo: Foo) {
        switch foo {
        case .bar(let baz):
            self =  .bar(baz: baz)
        case .baz(let bar):
            self = .baz(bar: bar)
        }
    }
}

我有:

no instance of overloaded function "std::vector<_Ty, _Alloc>::erase [with _Ty=int, _Alloc=std::allocator<int>]" matches the argument list

std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>> std::vector<int,std::allocator<_Ty>>::erase(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<int>>>,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<int>>>)': cannot convert argument 1 from 'int' to 'std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<int>>>

我有tile.h:

extern std::vector<BallisticObject> BallisticVector;

我有一个来自BallisticsObject.cpp的片段:

class Tile
{
public:
    Tile(float height, char type);
    ~Tile();
    unsigned char myType;
    float myHeight;
    //future optimization: change below to forward_list
    std::vector<int> Indices_of_Ballistic_Objects_Above_Me;
}; 

我有一种唠叨的感觉,我要么做了一件小事,要么做了一件大事......

1 个答案:

答案 0 :(得分:0)

使用Erase-remove_idiom

auto& v = Map[TileOverX][TileOverY]->Indices_of_Ballistic_Objects_Above_Me;

v.erase(std::remove(v.begin(), v.end(), myIndex));

如果您想检查缺失值,可以这样做:

auto& v = Map[TileOverX][TileOverY]->Indices_of_Ballistic_Objects_Above_Me;
auto old_size = v.size();

v.erase(std::remove(v.begin(), v.end(), myIndex));
if (old_size == v.size()) {
     std::cout <<
        "Error: ballistics object couldn't find itself in the tile's vector of indices!\n";
}