Об указателях в c++ и не только
Во первых, почему то, когда я убираю строчки:
int n = vec.size();
for (int i = 0; i < n; ++i)
{
cout << vec[i] << "\t";
}
cout << endl << n << endl;
У меня появляется ошибка abort() was called. Совсем не понимаю почему так происходит.
Во- вторых, int n = vec.size();
в теле main() присваивает n значение 0, я так понимаю это связано с тем, что vec удаляется после завершения get_vector(), а ссылка &vec ссылается на пустоту, тогда не понимаю как вернуть вектор из функции. Нужна помощь.
Вот мой код:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector <int>* get_vector()
{
vector <int> vec;
string current_stroke;
while (true)
{
cin >> current_stroke;
if (current_stroke == "q") //Здесь завершается заполнение вектора, если в консоль ввести q
{
break;
}
vec.push_back(stoi(current_stroke));
}
int n = vec.size();
for (int i = 0; i < n; ++i)
{
cout << vec[i] << "\t";
}
cout << endl << n << endl;
return &vec;
}
int main()
{
vector <int> vec = *get_vector();
int n = vec.size();
cout << n;
for (int i = 0; i < n; ++i)
{
cout << vec[i] << "\t";
}
return 0;
}
Исправленный вариант:
vector <int> get_vector()
{
vector <int> vec;
string current_stroke;
while (true)
{
cin >> current_stroke;
if (current_stroke == "q")
{
break;
}
vec.push_back(stoi(current_stroke));
}
return vec;
}
int main()
{
vector <int> vec = get_vector();
int n = vec.size();
cout << n;
for (int i = 0; i < n; ++i)
{
cout << vec[i] << "\t";
}
return 0;
}
Источник: Stack Overflow на русском