【问题标题】:How to make a list of stacks in C++?如何在 C++ 中制作堆栈列表?
【发布时间】:2021-01-09 06:05:03
【问题描述】:

我正在尝试使用以下代码在 C++ 中创建堆栈列表,但出现错误

main.cpp:17:13: error: ‘__gnu_cxx::__alloc_traits > >::value_type {aka class std::stack}’ has no member named ‘push_back’
 vs[i-1].push_back(s);

代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
vector<stack<int>> vs;

for(int i=1; i<4; i++)
{
stack<int> s;
s.push(i*2);
s.push(i*3);
s.push(i*4);
vs[i-1].push_back(s);
}

return 0;
}

【问题讨论】:

  • 通过vs[i-1],您正在索引存储堆栈的向量。堆栈没有push_back()
  • don't include &lt;bits/stdc++.h&gt;。请了解如何缩进您的代码以使其更易于阅读。

标签: c++ stl stack


【解决方案1】:

这不仅仅是堆栈向量的事实。它实际上是向量的基本属性。您有两个选项可以将值添加到向量中。

  1. 如果你不声明向量的大小(你做了什么)

     vector<stack<int>> vs;
     stack<int>s;
    

然后你可以使用vs.push_back(s)插入,它会自动处理索引。

  1. 另一种方法是你可以先声明向量的大小。喜欢

    vector<stack<int>> vs(sz); //size(sz) is defined by user
    stack<int>s;
    

然后就可以用vs[index]= s插入了,这次就得手动处理索引了。

【讨论】:

    【解决方案2】:

    你不能使用这条线:-

    vs[i-1].push_back(s);
    

    要么在前面定义列表的大小。 例如

    vector<stack<int> > vs(100);
    

    否则只写

    vs.push_back(s);
    

    更新的解决方案

    #include <iostream>
    #include<stack>
    #include<vector>
    using namespace std;
     
    int main()
    {
        vector< stack<int> > vs;
     
    for(int i=1; i<4; i++)
    {
        stack<int> s;
        s.push(i*2);
        s.push(i*3);
        s.push(i*4);
        vs.push_back(s);
    }
     
    return 0;
    }
    

    【讨论】:

      【解决方案3】:

      首先,您的向量是空的,其中的任何索引都将超出范围并导致未定义的行为。

      其次,vs[any_valid_index] 是一个堆栈,而不是一个向量。

      你可能想要的是

      vs.push_back(s);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-22
        • 2011-01-16
        • 1970-01-01
        • 2016-11-25
        相关资源
        最近更新 更多