📜  C++ STL 中的堆栈列表

📅  最后修改于: 2021-09-03 14:55:50             🧑  作者: Mango

先决条件:列表、堆栈

列表是允许非连续内存分配的序列容器。与向量相比,列表的遍历速度较慢,但一旦找到位置,插入和删除的速度就会很快。

句法:

堆栈是一种具有 LIFO(后进先出)工作类型的容器适配器,其中在一端添加一个新元素,并且(顶部)仅从该端删除一个元素。

句法:

List of Stacks是一种具有一系列栈的容器,这是一个二维容器,其中N行列表和M列栈,两个维度的大小都是不固定的。可以使用迭代器遍历和访问

句法:

例子:

插入在堆栈列表中的插入是使用push()函数的。

例子:

C++
// Loop to push element
// into a stack
for
    i in[0, n]
    {
        s.push(i)
    }
  
// Push Stack into the list
ls.push_back(s);


C++
// Loop to iterate over list
for (iterator it = ls.begin();
     it != ls.end(); it++) {
  
    // Stack of the List
    stack
        st = *it;
  
    while (!st.empty()) {
        cout << st.top();
        st.pop();
    }
}


C++
// C++ program for implementation
// of the lists of stack
  
#include 
using namespace std;
  
// Function for printing the
// elements in a list
void showlist(list > ls)
{
  
    // Traverse the list and
    // print row wise stack
    for (list >::iterator it1
         = ls.begin();
         it1 != ls.end(); ++it1) {
  
        // Copy rows in stack
        stack it2 = *it1;
  
        // Print stack elements while
        // it is not empty
        while (!it2.empty()) {
            cout << it2.top() << " ";
            it2.pop();
        }
        cout << endl;
    }
}
  
// Driver Code
int main()
{
    // List of stacks
    list > ls;
  
    // Insert rows in list
    for (int i = 0; i < 10; ++i) {
        // Insert element in
        // stack as column
        stack s;
  
        for (int j = i; j < 10; j++) {
            s.push(j);
        }
  
        ls.push_back(s);
    }
  
    cout << "List of stack is : \n";
    showlist(ls);
  
    return 0;
}


遍历使用迭代器在堆栈列表中进行遍历。

C++

// Loop to iterate over list
for (iterator it = ls.begin();
     it != ls.end(); it++) {
  
    // Stack of the List
    stack
        st = *it;
  
    while (!st.empty()) {
        cout << st.top();
        st.pop();
    }
}

上面的代码使用起始迭代器ls.begin()和结束迭代器ls.end()在每个索引处遍历list ls 。为了访问它使用(*it)作为堆栈的元素,是指向列表 > ls 中元素的指针。

下面是说明在堆栈列表中插入和遍历的程序:

C++

// C++ program for implementation
// of the lists of stack
  
#include 
using namespace std;
  
// Function for printing the
// elements in a list
void showlist(list > ls)
{
  
    // Traverse the list and
    // print row wise stack
    for (list >::iterator it1
         = ls.begin();
         it1 != ls.end(); ++it1) {
  
        // Copy rows in stack
        stack it2 = *it1;
  
        // Print stack elements while
        // it is not empty
        while (!it2.empty()) {
            cout << it2.top() << " ";
            it2.pop();
        }
        cout << endl;
    }
}
  
// Driver Code
int main()
{
    // List of stacks
    list > ls;
  
    // Insert rows in list
    for (int i = 0; i < 10; ++i) {
        // Insert element in
        // stack as column
        stack s;
  
        for (int j = i; j < 10; j++) {
            s.push(j);
        }
  
        ls.push_back(s);
    }
  
    cout << "List of stack is : \n";
    showlist(ls);
  
    return 0;
}
输出:
List of stack is : 
9 8 7 6 5 4 3 2 1 0 
9 8 7 6 5 4 3 2 1 
9 8 7 6 5 4 3 2 
9 8 7 6 5 4 3 
9 8 7 6 5 4 
9 8 7 6 5 
9 8 7 6 
9 8 7 
9 8 
9
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程