Функция, возвращающая итератор в вектор - PullRequest
0 голосов
/ 28 мая 2018

Каков наилучший способ возврата итератора для приведенного ниже кода? В приведенном ниже коде он не дает правильного вывода для этой строки

cout<<*p<<endl;

#include<iostream>
#include<vector>
using namespace std;
vector <int> :: iterator int_begin(vector <int> V);
int main()
{
  vector <int> V;
  V.push_back(3);
  V.push_back(1);
  vector <int> :: iterator p=int_begin(V);
  cout<<*p<<endl;
  return 0;
}
vector <int> :: iterator int_begin(vector <int> V)
{
  cout<<*V.begin()<<endl;
  return V.begin();
}

1 Ответ

0 голосов
/ 28 мая 2018

Вы передаете объект по значению int_begin().То, что вы получите, это итератор для std::vector, который не живет после вызова функции.Следовательно, в вызывающей функции итератор недопустим.

Передайте объект по ссылке.

vector <int> :: iterator int_begin(vector <int>& V) // Passed by reference
{
  cout<<*V.begin()<<endl;
  return V.begin();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...