我有这个方法:
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/