Об указателях в c++ и не только

Рейтинг: 0Ответов: 0Опубликовано: 07.08.2023

Во первых, почему то, когда я убираю строчки:

    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;
}

Ответы

Ответов пока нет.