如何将某些元素从shared_ptr擦除为对象向量?

时间:2018-06-22 05:52:55

标签: c++ class vector shared-ptr

我已经创建了一个成员变量(在类Group中),该成员变量是向量(称为shared_ptr,它存储类型为members(不同的对象)的User类),这是成员变量定义(空):

std::shared_ptr <std::vector<User>> members = std::make_shared<std::vector<User>>();

要从向量(User中消除某个members对象,我在类remove内创建了一个成员函数(Group)。它会检查向量中的所有User对象,并在遇到要寻找的带有a.URI值的对象时,会擦除向量中该位置的对象。

void Group::remove(User a) {
    for (auto i = 0; i < members->size(); i++){
        if (a.URI == (*(members->begin()+i)).URI) members->erase(*(members->begin() + i));
    }

到目前为止,这就是我的remove函数,但是它不起作用。我检查了不同的配置,但无法正常工作。我的功能有问题吗?应该如何实现此功能(shared_ptr的特殊规则?)?有没有更好/更好的方法?

我认为这里不需要更多代码即可解决我的问题。但是,对于那些想要MCV示例的人,我尝试编写一个here(Ideone)。

2 个答案:

答案 0 :(得分:3)

首先,std::vector::erase将迭代器作为其参数,因此请更改

members->erase(*(members->begin() + i))

members->erase(members->begin() + i)

第二,在擦除元素之后,对i++求值时,您将跳过下一个元素或跳出vector的范围。您可以将循环更改为

for (auto i = 0; i < members->size(); ) {
    if (a.URI == (*(members->begin()+i)).URI) 
        members->erase(members->begin() + i);
    else
        i++;
}

答案 1 :(得分:0)

为什么不将向量skyBox.rotation.y = ( value * Math.PI / 2 ); // .x and .z rotation = 0 声明为组类的静态成员。我是这样的:

members

希望有帮助。