访问unique_ptr向量的迭代器的成员
Access member of a iterator of a vector of unique_ptr
我有一个向量:
std::vector<std::unique_ptr<MyAbstract>> myList;
我想在循环中访问成员"id"并擦除特定项目:
for (auto it = myList.begin(); it != myList.end();)
{
if (it->id == 2)
{
it = myList.erase(it);
break;
}
else
++it;
}
这条线...
if (it->id == 2)
给我一个错误:
"class std::unique_ptr"没有名为"id"的成员
这似乎有效:
if (it->get()->id == 2)
我想知道为什么?!以下是完整代码:http://ideone.com/kFohfA
it
是一个迭代器,因此it->
尝试访问存储在向量(std::unique_ptr<MyAbstract>
)中的类型的成员,而不是std::unique_ptr
所持有的MyAbstract
。 您需要做的是取消引用迭代器以获取底层std::unique_ptr<MyAbstract>
然后您可以使用类似->
访问MyAbstract
的成员
(*it)->id
*it
的类型为std::unique_ptr<MyAbstract>
,当然它没有名为id
的成员。
所以你必须通过get ()
来获得它的"价值":
it->get()->id
相关文章:
- "迭代器"和"const_iterator"不是 STL 容器的必需成员?
- 如何将迭代器调用转发给类的私有成员?
- 成员函数中的迭代器出现问题
- 如何在C++中仅获取容器内类成员的迭代器
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 为什么向量的.at()成员函数返回引用而不是迭代器
- 将列表迭代器存储为成员
- 使用迭代器成员函数是否仅适用于某些向量类型"empty()"?
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 树不维护递归迭代器成员
- 如何将迭代器变量声明为私有成员变量
- 我如何从循环内部使用迭代器的函数内部的getter中检索特定的成员
- C :我可以将成员变量的迭代器带入班级之一
- 如何使用C STD :: SET中的迭代器访问成员功能
- C++:将成员容器的迭代器接口转发到类接口
- 如何从 std 容器的迭代器为成员元素创建迭代器
- 通过迭代器为映射的成员赋值
- 如果我创建一个修改值的迭代器,静态成员"reference"应该是什么类型?
- C++迭代器作为类方法中使用的类成员
- 类成员向量上的迭代器未正确取消引用