我已经创建了一个成员变量(在类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)。
答案 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
希望有帮助。