C++ 我可以从方法返回本地 vector 上的迭代器吗?

标签 c++ vector reference iterator

我有这个方法:

route_departure_const_iterator departure_at(platform_route_const_reference pr, packed_time tm)
{
    std::vector<route_departure_object> v;
    for (auto&& e : pr.departures) {
        int i = 0;
        while (true)
        {
            if (pr.tt->timetable_route_departures.at(i).platform_name == pr.platform_name && pr.tt->timetable_route_departures.at(i).route_name == pr.route_name && pr.tt->timetable_route_departures.at(i).departure_time >= e)
            {
                route_departure_const_reference rd = pr.tt->timetable_route_departures.at(i);
                v.push_back(rd);
                break;
            }
            i++;
        }
    }
    return v.begin();
}

我的问题是,如果我在这个方法中初始化了新的对象 vector ,当我返回迭代器时,它会指向这个 vector 还是退出该方法后这个 vector 会被删除? 那么,pr.tt->timetable_route_departures是route_departure_object的 vector ,就像 vector v一样。 Route_departure_const_reference rd 是对route_departure_object 的引用。我的 vector v 是由引用的原始对象组成还是它们将是新对象的引用?

使用此方法,当我在该方法之外使用返回的迭代器时,在对相同对象的引用 vector 上,它会工作吗?

我的意思是,我有这个方法:

route_departures_const_reference departures(platform_route_const_reference pr)
{
    std::vector<route_departure_object> v;
    for (auto&& e : pr.departures) {
        int i = 0;
        while (true)
        {
            if (pr.tt->timetable_route_departures.at(i).platform_name == pr.platform_name && pr.tt->timetable_route_departures.at(i).route_name == pr.route_name && pr.tt->timetable_route_departures.at(i).departure_time == e)
            {
                route_departure_const_reference rd = pr.tt->timetable_route_departures.at(i);
                v.push_back(rd);
                break;
            }
            i++;
        }
    }
    return v;
}

pr.tt->timetable_route_departures 中还有很多对象,我只选择其中一些。然后,当我在这个返回的 vector 上使用返回的迭代器时,它会指向 pr.tt->timetable_route_departures 中完全相同的选定对象吗??? 非常感谢您的帮助!

最佳答案

if I initialized new vector of objects in this method, when I return the iterator, will it point at this vector or will this vector be deleted after exiting the method?

当函数退出时, vector 超出范围时将被销毁,因此返回的迭代器将悬空。

Will my vector v consists of the original objects by references or they will be references on new objects?

它将包含原始对象的拷贝

when I will use the returned iterator outside this method, on vector of references to the same objects, will it work?

没有。因为第一,您没有引用 vector ,而是复制对象的 vector 。第二, vector 已经被破坏,并且你有一个悬空的迭代器。

route_departures_const_reference departures(platform_route_const_reference pr)

如果route_departures_const_reference正如其名称所示,实际上是一个引用(即 std::vector<route_departure_object>& ),那么您将返回一个对已破坏 vector 的悬空引用。

when I will use returned iterator on this returned vector, will it point at the exact same chosen objects in pr.tt->timetable_route_departures?????

不,它将引用所创建的复制对象(如果返回的 vector/迭代器一开始就有效)。

关于C++ 我可以从方法返回本地 vector 上的迭代器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65602148/

相关文章:

Python:为 "through"分配一个迭代器

C++ 在函数内部创建引用变量

c++ - 组合可选宏以形成列表

c++ - STL 容器的迭代器是静态变量吗?

vector - 在 GNU Octave 中分割矩阵和向量以获取未提取的行

c++ - 使用 map 代替 vector

C++/CX - 我需要从 const char* 实例化 Platform::String

android - NDK 链接库与 cmake

c++ - 如何以及为什么可以更改成员的访问级别?

c - 如何根据当前标准检查 C 源代码?