C++ C++;-空std::list begin()和end()不相等

C++ C++;-空std::list begin()和end()不相等,c++,list,loops,iterator,C++,List,Loops,Iterator,我正在使用以下代码遍历std::list: std::cout << "size: " << get_day_entries().size() << "\n"; for (std::list<DayEntry*>::iterator it = get_day_entries().begin(); it != get_day_entries().end(); ++it){ (*it)->print(); if ((*it)-&g

我正在使用以下代码遍历std::list:

std::cout << "size: " << get_day_entries().size() << "\n";
for (std::list<DayEntry*>::iterator it = get_day_entries().begin(); it != get_day_entries().end(); ++it){
    (*it)->print();
    if ((*it)->get_date()->compare(*date)){
        std::cout << "FOUND: \n";
        (*it)->print();
        return (*it);
    }   
}       
以下是
get\u day\u entries()
的代码:

std::list get_day_entries(){return m_day_entries;}
我猜函数
get\u day\u entries()
会按值返回列表(因为您没有提供a)。这意味着您可以从两个不同的列表中获得开始迭代器和结束迭代器

比较两个不同容器中的迭代器会导致错误


要么保存列表的副本,要么让函数通过引用返回列表。

它不确定提供的代码,但我想您的函数
get\u day\u entries()
每次调用它时都会创建新列表(例如通过值返回,而不是通过引用)。通过这样做,他们的迭代器应该而不是被比较,并且可能(而且很可能不会)给出正确的结果。比较来自不同容器的迭代器会导致未定义的baheviour

显示
get_day_entries
的定义如果此函数按值返回list,您将得到seg fault,因为临时对象列表被删除,并且您的迭代器无效。就是这样。谢谢关于何时返回某事物的引用而不是其值,您是否有一些指导原则?@user96649实际上没有任何通用指导原则,所有这些都必须根据返回值的使用方式根据具体情况确定。
if (get_day_entries().begin() == get_day_entries().end())
    std::cout << "EQUALS\n";
std::list<DayEntry*> get_day_entries(){return m_day_entries;}