c++容器list、vector、map、set区别与用法详解

C++容器list、vector、map、set区别与用法详解

C++容器是C++标准库提供的一些数据结构,包括vector、list、map、set等。这些容器在我们编写代码时,经常会被用到。针对不同的应用场景,我们会选择不同的容器。本文将对C++中常用的四种容器:list、vector、map、set做一个详细介绍,分别介绍其区别和用法。

List

list是C++标准库中的一个双向链表容器,它支持大部分的双向链表操作,包括随机访问、插入和删除等操作。由于它是双向链表,所以插入和删除元素时的效率比vector要高。

创建list容器

#include <list>

std::list<int> myList; //声明一个空的int型list

插入元素

list容器支持在任意位置插入元素,可以使用push_back()push_front()insert()等方法插入元素。

#include <list>
#include <iostream>

int main(){
    std::list<int> myList; 
    myList.push_back(1);  //尾部插入1
    myList.push_back(2);  //尾部插入2
    myList.push_front(0); //头部插入0
    auto it = myList.begin();
    it++; //指向1
    myList.insert(it, -1); //在1前面插入-1
    for(auto i:myList)  //遍历输出
        std::cout << i << ' ';
    std::cout << std::endl;
    return 0;
}

输出:0 -1 1 2

删除元素

可以使用pop_back()pop_front()erase()等方法删除元素。

#include <list>
#include <iostream>

int main(){
    std::list<int> myList; 
    myList.push_back(1);  //尾部插入1
    myList.push_back(2);  //尾部插入2
    myList.push_front(0); //头部插入0
    auto it = myList.begin();
    it++; //指向1
    myList.erase(it); //删除1
    for(auto i:myList)  //遍历输出
        std::cout << i << ' ';
    std::cout << std::endl;
    return 0;
}

输出:0 2

Vector

vector是C++标准库中的一个可变长的数组容器,它在数组元素的访问上具有类似于普通数组的优点,但又可以动态地增减容量,这使得它非常适合于需要高效率的数据存储和使用的场合。

创建vector容器

#include <vector>

std::vector<int> myVector; //声明一个空的int型vector

插入元素

vector容器支持在任意位置插入元素,可以使用push_back()push_front()insert()等方法插入元素。

#include <vector>
#include <iostream>

int main(){
    std::vector<int> myVector; 
    myVector.push_back(1);  //尾部插入1
    myVector.push_back(2);  //尾部插入2
    myVector.push_front(0); //头部插入0(不支持)
    auto it = myVector.begin();
    it++; //指向1
    myVector.insert(it, -1); //在1前面插入-1
    for(auto i:myVector)  //遍历输出
        std::cout << i << ' ';
    std::cout << std::endl;
    return 0;
}

输出:0 -1 1 2

删除元素

可以使用pop_back()erase()等方法删除元素。

#include <vector>
#include <iostream>

int main(){
    std::vector<int> myVector; 
    myVector.push_back(1);  //尾部插入1
    myVector.push_back(2);  //尾部插入2
    auto it = myVector.begin();
    it++; //指向1
    myVector.erase(it); //删除1
    for(auto i:myVector)  //遍历输出
        std::cout << i << ' ';
    std::cout << std::endl;
    return 0;
}

输出:1

Map

map是C++标准库中的一个关联数组容器,它可以将任何一种数据类型映射到另一种数据类型,使用一个类似于数组下标的方式进行访问。

创建map容器

#include <map>

std::map<int, std::string> myMap; //声明一个int型到std::string型的map

插入元素

map容器支持键-值插入。

#include <map>
#include <iostream>

int main(){
    std::map<int, std::string> myMap; 
    myMap[0] = "zero"; //插入键0,值为"zero"
    myMap.insert(std::make_pair(1, "one")); //插入键1,值为"one"
    for(auto i:myMap)  //遍历输出
        std::cout << i.first << ' ' << i.second << std::endl;
    return 0;
}

输出:

0 zero
1 one

删除元素

可以使用erase()方法删除元素。

#include <map>
#include <iostream>

int main(){
    std::map<int, std::string> myMap; 
    myMap[0] = "zero"; //插入键0,值为"zero"
    myMap[1] = "one";  //插入键1,值为"one"
    auto it = myMap.find(1); //定位键为1的元素
    myMap.erase(it); //删除键为1的元素
    for(auto i:myMap)  //遍历输出
        std::cout << i.first << ' ' << i.second << std::endl;
    return 0;
}

输出:

0 zero

Set

set是C++标准库中的一个集合容器,它对集合中的元素进行排序,并且去除重复元素。set中的元素不可以通过下标进行访问。

创建set容器

#include <set>

std::set<int> mySet; //声明一个空的int型set

插入元素

set容器使用insert()方法插入元素。

#include <set>
#include <iostream>

int main(){
    std::set<int> mySet; 
    mySet.insert(2); //插入2
    mySet.insert(1); //插入1
    mySet.insert(3); //插入3
    mySet.insert(1); //插入重复元素1
    for(auto i:mySet)  //遍历输出
        std::cout << i << ' ';
    std::cout << std::endl;
    return 0;
}

输出:1 2 3

删除元素

可以使用erase()方法删除元素。

#include <set>
#include <iostream>

int main(){
    std::set<int> mySet; 
    mySet.insert(2); //插入2
    mySet.insert(1); //插入1
    mySet.insert(3); //插入3
    mySet.erase(1); //删除1
    for(auto i:mySet)  //遍历输出
        std::cout << i << ' ';
    std::cout << std::endl;
    return 0;
}

输出:2 3

小结

本文介绍了C++标准库中常用的四种容器:list、vector、map、set。它们分别适用于不同的应用场景,灵活使用可以帮助我们编写高效率的代码。具体实用时根据需求选择容器即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++容器list、vector、map、set区别与用法详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 详解Matlab如何绘制圆角半透明图例

    如何绘制圆角半透明图例 在MATLAB中,我们可以使用legend函数来添加图例到绘图中。该函数允许设置图例框的不透明度,但默认情况下没有提供设置圆角的选项。但是,我们可以通过一些技巧来实现绘制圆角半透明图例。 以下是绘制圆角半透明图例的详细攻略: 设置图例不透明度 首先,我们可以通过设置图例的Alpha不透明度选项来使其变为半透明。以下代码演示如何使用Al…

    C 2023年5月23日
    00
  • C语言数组指针表示法

    C语言数组指针表示法是指使用指针访问数组元素的方法。在使用中,我们可以将数组名作为指针使用,指向数组的第一个元素,通过加减指针的偏移量来访问数组中的其他元素。 基本使用方法 定义数组,声明指针 c int a[5] = {1, 2, 3, 4, 5}; int *p; 将数组名作为指针使用,指向数组的第一个元素 c p = &a[0]; // 或者 …

    C 2023年5月9日
    00
  • windows XP系统Stop c0000218 unknown hard error 蓝屏故障的解决方法

    Windows XP系统Stop c0000218 unknown hard error 蓝屏故障的解决方法 如果你的Windows XP系统出现了Stop c0000218 unknown hard error蓝屏故障,并且无法正常启动,那么请按照以下步骤进行故障排除。 步骤一:使用Windows XP安装光盘或启动盘启动计算机 插入Windows XP安…

    C 2023年5月23日
    00
  • C语言关键字auto与register的深入理解

    C语言关键字auto与register的深入理解 1. 什么是关键字auto? auto是C语言中的一个关键字,表示自动变量。在程序中定义变量时如果没有显式地指定变量的存储类别,那么变量的存储类别默认为auto。具有auto存储类别的变量只能在定义它的块内(也就是作用域)使用,一旦离开这个作用域,变量就会被自动销毁。 例如,下面的代码中,变量a定义为自动变量…

    C 2023年5月23日
    00
  • C语言不使用strcpy函数如何实现字符串复制功能

    要实现字符串复制功能,可以使用C语言内置的strcpy函数,但如果不使用该函数,也可以通过以下两种方法实现: 方法一:使用循环遍历字符串实现字符串复制 该方法的基本思路是使用循环遍历需要复制的字符串,逐个复制字符并放入新的字符数组中。代码示例如下: // 需要复制的字符串 char str1[] = "hello world"; // 初…

    C 2023年5月23日
    00
  • Django Rest framework之认证的实现代码

    下面我为您详细讲解Django Rest Framework(DRF)中实现认证的代码攻略。 1、DRF认证方式 DRF提供了多种认证方式,包括: BasicAuthentication:HTTP的基本认证方式,不安全,适用于内部系统或测试环境; TokenAuthentication:使用token实现的认证方式,适用于前后端分离项目; SessionAu…

    C 2023年5月23日
    00
  • C if else if ladder

    C 语言中的 if else if 梯形结构又被称作 if else if ladder,它是多个条件语句的嵌套,可以用来实现复杂的条件判断。以下是 if else if ladder 的完整使用攻略: 梯形结构语法格式 if (condition1) { statement1; } else if (condition2) { statement2; } …

    C 2023年5月9日
    00
  • C++顺序表的实例代码

    我来详细讲解一下“C++顺序表的实例代码”的完整攻略。 什么是顺序表? 顺序表是一种线性结构,它的元素在物理上是连续的。顺序表的实现方法是利用数组来存储元素,这个数组称为顺序表的存储空间。 如何实现顺序表? 下面是一份简单的顺序表的实例代码: #include <iostream> using namespace std; #define MAX…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部