如何在C ++ STL中插入一系列元素?

如何在C ++ STL中插入一系列元素?

STL(Standard Template Library)是C ++中最强大的部分之一。STL是一个C ++标准程序库,它提供了一组通用的模板类和函数,包括容器,算法和迭代器。在C ++ STL中,您可以使用各种容器来存储和处理数据,这使得编写程序更加简单,快速和可读性的。STL中提供了一种容器类型来存储一系列元素,而插入元素也是容器操作中经常需要进行的操作。

本文将介绍如何在C ++ STL中插入一系列元素。

使用 vector 容器

vector是一种动态数组,它可以存储任何类型的数据。向vector容器添加数据,使用 vector::push_back()函数。vector::insert() 函数可以插入一系列元素,分为以下两种情况:

插入单个元素

#include <vector>
#include <iostream>
using namespace std;
int main(){
    vector<int> vec;
    vec.push_back(10);
    vec.push_back(20);
    vec.insert(vec.begin()+1, 30);
    //输出vec数组
    for (auto i : vec)
        cout << i << " ";
    return 0;
}

上述代码将在索引位置1插入一个整数30,这将向量中的元素分别变为10, 30, 20。

插入多个元素

使用vector::insert()函数插入多个元素。如下:

#include <vector>
#include <iostream>
using namespace std;
int main(){
    vector<int> vec;
    vec.push_back(10);
    vec.push_back(20);
    vec.insert(vec.begin()+1, {30, 40, 50});
    //输出vec数组
    for (auto i : vec)
        cout << i << " ";
    return 0;
}

上述代码将在索引位置1插入整数数组{30,40,50},这将向量中的元素分别变为10, 30, 40, 50,20。

使用 list 容器

list是双向链表类型,它可以在任何位置快速添加和删除元素。list的插入操作使用list::insert()函数。与vector不同,list::insert()函数不能使用大括号初始化列表。

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

int main(){
    list<int> l1;
    l1.push_back(10);
    l1.push_back(20);
    l1.insert(l1.begin(), 30);
    l1.insert(l1.end(), 40);
    l1.insert(next(l1.begin()), 50);
    //输出链表中元素
    for(auto x : l1){
        cout << x << " ";
    }
    return 0;
}

上述代码将在链表中插入数值为30,50和40,从而将链表中的元素分别变为30, 10, 50, 20, 40。next(l1.begin())是使用C ++STL中专用的next指针函数,它返回迭代器参数之后的元素。

使用 deque 容器

deque是双端队列,能够使用通用迭代器插入多个元素。

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int main(){
    deque<int> dq1{1,2,3};
    int arr[]={4,5};
    dq1.insert(dq1.begin(),&arr[0],&arr[2]);
    for(auto x:dq1)
    cout<<x<<endl;
}

输出结果:4, 5, 1, 2, 3

使用 set 容器

set是一种容器类型,它可以自动按升序存储元素,并且每个元素都是唯一的。使用set::insert()函数向set容器插入单个或多个元素,如下所示:

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

int main(){
    set<int> s1;
    s1.insert(10);
    s1.insert(20);
    s1.insert(30);
    s1.insert(40);
    s1.insert(30);//30已经存在,不会再次插入
    s1.insert({50, 60, 70});
    //输出set中的元素
    for(auto x : s1){
        cout << x << " ";
    }
    return 0;
}

上述代码将在set中插入整数20, 30, 40, 50, 60和70,30已经存在,不会再次插入,这将set中的元素分别变为10, 20, 30, 40, 50, 60和70,按升序排列。

使用 map 容器

map是一个存储键值对的容器,称为映射。在map容器中插入元素,使用map::insert()函数。该函数可以插入单个或多个键值对元素。

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

int main(){
    map<char, int> m1;
    m1.insert(pair<char, int>('a', 1));
    m1.insert(pair<char, int>('b', 2));
    m1.insert(pair<char, int>('c', 3));
    m1.insert(make_pair('d', 4));
    m1.insert(make_pair('e', 5));
    //输出map中的元素
    for(auto x : m1){
        cout << x.first << ":" << x.second << endl;
    }
    return 0;
}

上述代码将在map容器中插入键值对元素(’a’,1),(’b’,2),(’c’,3),(’d’,4),(’e’,5),并按键的升序打印map容器中的元素。

多容器插入

C ++ STL库中的所有容器都可以使用相同的通用技术来添加元素。例如,可以使用函数中的多个容器,如vector,list或map来执行多容器插入。

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

template<typename T1, typename T2>
void insert_multiple(T1 &container, T2 && value){
    container.insert(container.end(), value.begin(), value.end());
}

int main(){
    vector<int> v1;
    list<int> l1;
    map<char, int> m1;

    vector<int> vec{10, 20, 30, 40, 50};
    list<int> li{11, 22, 33, 44, 55};
    map<char, int> mp{{'a', 1}, {'b', 2}, {'c', 3}};

    insert_multiple(v1, vec);
    insert_multiple(l1, li);
    insert_multiple(m1, mp);

    //输出vector
    cout << "v1: ";
    for(auto i : v1)
        cout << i << " ";
    cout << endl;

    //输出list
    cout << "l1: ";
    for(auto i : l1)
        cout << i << " ";
    cout << endl;

    //输出map
    cout << "m1: ";
    for(auto x : m1){
        cout << x.first << ":" << x.second << " ";
    }
    cout << endl;

    return 0;
}

上述代码使用insert_multiple()函数将元素插入到vector,list和map容器中,然后输出它们。

结论

在C ++ STL中,插入元素是常见的操作之一。使用STL提供的各个容器类型(如vector,list,deque,set和map),可以轻松地将元素插入到容器中。元素的插入方式可以根据需要灵活选择,单个或多个元素的插入可使用相应的STL函数完成。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程