C++,推入 List<Class*>,vector<Class> 迭代器
Posted
技术标签:
【中文标题】C++,推入 List<Class*>,vector<Class> 迭代器【英文标题】:C++, Pushing into List<Class*>, vector<Class> iterator 【发布时间】:2019-03-21 16:48:33 【问题描述】:我得到了向量
list<C_Student*> listt;
for (vector<C_Student>::iterator it = V_Students.begin(); it != V_Students.end(); it++)
if (it->GetDegreeByDisciplineName(disciplineName) == degree)
listt.push_back(*it);
这给了
Description Project File Line Suppression State
Error (active) E0304 no instance of overloaded function "std::list<_Ty, _Alloc>::push_back [with _Ty=C_Student *, _Alloc=std::allocator<C_Student *>]" matches the argument list C++_Project
我做错了什么?
【问题讨论】:
尝试获取地址&*it
。
【参考方案1】:
由
listt.push_back(*it);
您尝试在列表中存储C_Student
的副本。要将指针推入列表,您需要使用 &
运算符来取消引用 *it
对象:
listt.push_back(&*it);
vector 中的元素在修改vector 时无效,这可能导致列表中的指针悬空。我希望你能意识到这一点。
【讨论】:
所以保存学生的副本比保存指向它的指针更好吗? 如果您确定创建列表后,向量不会被修改,您可以保留现有的。如果向量的不变性不能保证,学生的副本更安全。 如果列表只是为了显示“数据”,可以吗?将它放入一个函数并在打印每个函数时循环。然后列表被销毁 是的,在这种情况下它是安全的。以上是关于C++,推入 List<Class*>,vector<Class> 迭代器的主要内容,如果未能解决你的问题,请参考以下文章