首页 > 解决方案 > 为什么在这个代码结束循环中没有结束?

问题描述

我正在尝试弹出向量中的数据。但是打印后代码不出来为什么?应该怎么做才能使它正确。

#include <iostream>
#include <vector>
using namespace std;

typedef struct add
{
        string name;
        string address;
}Address;
typedef struct st
{
        vector<Address>madder;
}SLL;

int main()
{
        SLL * st;
        int n=3;
        Address ad,rad;
        while(n--)
        {
                cout << "enter the name : ";
                cin >> ad.name;
                cout << "enter the adderess : ";
                cin >> ad.address;
                st->madder.push_back(ad);
        }
        while (!st->madder.empty())
        {
                rad = st->madder.back();
                cout << rad.name << " " <<rad.address <<endl;
                st->madder.pop_back();
        }

}

标签: c++stl

解决方案


st在取消引用之前,您必须分配一个要指向的对象st

此外,您应该删除分配的内容。

int main()
{
        SLL * st;
        int n=3;
        Address ad,rad;
        st = new SLL; // add this
        while(n--)
        {
                cout << "enter the name : ";
                cin >> ad.name;
                cout << "enter the adderess : ";
                cin >> ad.address;
                st->madder.push_back(ad);
        }
        while (!st->madder.empty())
        {
                rad = st->madder.back();
                cout << rad.name << " " <<rad.address <<endl;
                st->madder.pop_back();
        }
        delete st; // add this

}

另一种选择是不使用指针并将SLL对象直接分配为变量。

int main()
{
        SLL st;
        int n=3;
        Address ad,rad;
        while(n--)
        {
                cout << "enter the name : ";
                cin >> ad.name;
                cout << "enter the adderess : ";
                cin >> ad.address;
                st.madder.push_back(ad);
        }
        while (!st.madder.empty())
        {
                rad = st.madder.back();
                cout << rad.name << " " <<rad.address <<endl;
                st.madder.pop_back();
        }

}

推荐阅读