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

我做错了什么?

【问题讨论】:

尝试获取地址&amp;*it 【参考方案1】:

listt.push_back(*it);

您尝试在列表中存储C_Student 的副本。要将指针推入列表,您需要使用 &amp; 运算符来取消引用 *it 对象:

listt.push_back(&*it);

vector 中的元素在修改vector 时无效,这可能导致列表中的指针悬空。我希望你能意识到这一点。

【讨论】:

所以保存学生的副本比保存指向它的指针更好吗? 如果您确定创建列表后,向量不会被修改,您可以保留现有的。如果向量的不变性不能保证,学生的副本更安全。 如果列表只是为了显示“数据”,可以吗?将它放入一个函数并在打印每个函数时循环。然后列表被销毁 是的,在这种情况下它是安全的。

以上是关于C++,推入 List<Class*>,vector<Class> 迭代器的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将整数向量推入 C++ 中的二维整数向量?

将 std::thread 按值推入列表

JNI,C ++将字符串推入堆栈

如何得到C++中的list的某个元素值?

q.push(cur);啥意思(在c++里),是将整个结构体推入fifo队列吗

c++容器 算法 迭代