Reputation: 105
So, given this function definition:
void xx(list<int> my_list, list<int>::iterator start){
list<int>::iterator _start = start;
distance(my_list.begin(),_start);
}
Why does the following cause distance()
inside the function to hang?
list<int> L;
L.push_back(0);
L.push_back(1);
xx(L, L.begin());
I thought it would just be zero. Yes, I know I suck.
Upvotes: 1
Views: 46
Reputation: 172864
my_list
is declared as pass-by-value, it's a copy from the argument. That means, given distance(my_list.begin(),_start);
, my_list.begin()
and _start
point to two different std::list
s, the behavior is undefined.
If you change it to pass-by-reference, then both the iterators point to the same std::list
and the code would be fine. e.g.
void xx(list<int>& my_list, list<int>::iterator start){
list<int>::iterator _start = start;
distance(my_list.begin(),_start);
}
Upvotes: 5