📜  C++ 中的列表和转发列表的集合以及示例

📅  最后修改于: 2022-05-13 01:55:19.297000             🧑  作者: Mango

C++ 中的列表和转发列表的集合以及示例

集合是一种关联容器,其中每个元素都必须是唯一的,因为元素的值标识了它。元素的值一旦添加到集合中就不能修改,尽管可以删除和添加该元素的修改值。

与集合一起使用的函数:

  • begin():返回指向集合中第一个元素的迭代器。
  • end() 返回一个迭代器,指向集合中最后一个元素之后的理论元素。
  • size() 返回集合中元素的数量。
  • max_size() 返回集合可以容纳的最大元素数。
  • empty() 返回集合是否为空。

列表

列表是允许非连续内存分配的序列容器。与向量相比,列表的遍历速度较慢,但一旦找到位置,插入和删除都很快。通常,当我们说 List 时,我们谈论的是双向链表。为了实现单链表,我们使用前向列表。

与列表一起使用的函数:

  • push_front():此函数用于将元素从前面推送到列表中。
  • push_back():该函数用于将元素从后面推入列表。

转发列表

STL中的前向列表实现了单链表。从 C++11 引入,前向列表在插入、删除和移动操作(如排序)方面比其他容器更有用,并且允许时间常数插入和删除元素。

与转发列表一起使用的函数:

  • push_front():此函数用于将元素从前面推送到 Forward 列表中。

STL 中的列表集

一组列表在设计复杂的数据结构时非常有用。

句法:

set> set_of_list: This stores lists. 
set> set_of_forward_list: This stores forward lists.

下面是演示列表集实现的 C++ 程序:

C++
// C++ program to implement
// the above approach
#include 
using namespace std;
  
// Function to print set contents
void print(set >& setOfList)
{
    for (auto x : setOfList) {
        // Each element of the set is
        // a list itself
        list li = x;
  
        // Printing list elements
        cout << "[ ";
        for (auto element : li)
            cout << element << ' ';
        cout << ']';
        cout << '\n';
    }
}
  
// Driver code
int main()
{
    set > setOfList;
  
    // Declaring a list
    list list1;
  
    // Pushing elements in the list
    // Pushing at the back
    list1.push_back(10);
    list1.push_back(12);
  
    // Pushing at the front
    list1.push_front(21);
  
    // Pushing at the back
    list1.push_back(16);
  
    // Inserting a list into the set
    setOfList.insert(list1);
  
    // Declaring another list
    list list2;
  
    // Pushing elements in the list
    // Pushing at the back
    list2.push_back(6);
    list2.push_back(9);
    list2.push_back(11);
  
    // Pushing at the front
    list2.push_front(2);
  
    setOfList.insert(list2);
  
    // Declaring another list
    list list3;
  
    // Pushing elements in the list
    // Pushing at the back
    list3.push_back(2);
    list3.push_back(6);
    list3.push_back(9);
    list3.push_back(1);
  
    setOfList.insert(list3);
  
    print(setOfList);
  
    return 0;
}


C++
// C++ program to implement
// the above approach
#include 
using namespace std;
  
// Function to print set contents
void print(set >& setOfForwardList)
{
    for (auto x : setOfForwardList) {
        // Each element is a forward list
        // itself
        forward_list li = x;
        cout << "[ ";
  
        for (auto element : li)
            cout << element << ' ';
  
        cout << ']';
        cout << '\n';
    }
}
  
// Driver code
int main()
{
    // Declaring a setOfForwardList
    set > setOfForwardList;
  
    // Declaring a forward list
    forward_list forwardList1;
  
    // Pushing elements in the forward
    // list
    forwardList1.push_front(10);
    forwardList1.push_front(12);
    forwardList1.push_front(21);
    forwardList1.push_front(16);
  
    // Inserting forward list into
    // the set
    setOfForwardList.insert(forwardList1);
  
    // Declaring another forward list
    forward_list forwardList2;
  
    // Pushing elements in the forward
    // list
    forwardList2.push_front(6);
    forwardList2.push_front(9);
    forwardList2.push_front(11);
    forwardList2.push_front(2);
  
    // Inserting forward list into
    // the set
    setOfForwardList.insert(forwardList2);
  
    // Print set contents
    print(setOfForwardList);
  
    return 0;
}


输出
[ 2 6 9 1 ]
[ 2 6 9 11 ]
[ 21 10 12 16 ]

下面是演示前向列表集实现的 C++ 程序:

C++

// C++ program to implement
// the above approach
#include 
using namespace std;
  
// Function to print set contents
void print(set >& setOfForwardList)
{
    for (auto x : setOfForwardList) {
        // Each element is a forward list
        // itself
        forward_list li = x;
        cout << "[ ";
  
        for (auto element : li)
            cout << element << ' ';
  
        cout << ']';
        cout << '\n';
    }
}
  
// Driver code
int main()
{
    // Declaring a setOfForwardList
    set > setOfForwardList;
  
    // Declaring a forward list
    forward_list forwardList1;
  
    // Pushing elements in the forward
    // list
    forwardList1.push_front(10);
    forwardList1.push_front(12);
    forwardList1.push_front(21);
    forwardList1.push_front(16);
  
    // Inserting forward list into
    // the set
    setOfForwardList.insert(forwardList1);
  
    // Declaring another forward list
    forward_list forwardList2;
  
    // Pushing elements in the forward
    // list
    forwardList2.push_front(6);
    forwardList2.push_front(9);
    forwardList2.push_front(11);
    forwardList2.push_front(2);
  
    // Inserting forward list into
    // the set
    setOfForwardList.insert(forwardList2);
  
    // Print set contents
    print(setOfForwardList);
  
    return 0;
}
输出
[ 2 11 9 6 ]
[ 16 21 12 10 ]

默认情况下,列表在集合中以非降序排列,并遵循集合中的逻辑,如果两个列表的第一个值相等,则比较列表的第二个值,依此类推。