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日

相关文章

  • VC随机函数srand和rand用法

    VC随机函数srand和rand用法是C/C++编程中非常常用的一种随机数生成方法,本攻略将详细介绍它们的用法。 srand函数 srand函数用于生成随机数种子,其原型如下: void srand(unsigned int seed); 其中,seed参数通常是时间或者程序启动时的系统时间等随机值,用于初始化随机数种子。如果不使用srand()的话,则每次…

    C 2023年5月22日
    00
  • asp生成不需要数据库的中奖码

    对于“asp生成不需要数据库的中奖码”的问题,我将提供完整的攻略。 首先,我们需要定义一个用来生成中奖码的函数。这个函数需要满足以下要求: 需要生成固定长度的中奖码。 每个中奖码由字母和数字组成。 中奖码不能重复。 下面是一个示例代码,用于生成6位长度的中奖码: Function GenerateCode() Dim code Dim i Randomize…

    C 2023年5月23日
    00
  • C++ 17标准正式发布! 更简单地编写和维护代码

    C++ 17标准是C++语言的一个更新版本,它于2017年正式发布。C++ 17引入了一些新的特性和修改之前版本的一些限制,这些特性有助于更简单地编写和维护代码。下面我将详细讲解如何使用这些特性。 新特性 C++ 17引入了许多新特性,这些特性可以使编写和维护C++代码更加容易。以下是一些值得注意的特性: 结构化绑定:可以将一个元组或其他结构体分配给多个变量…

    C 2023年5月23日
    00
  • 红与黑

    有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数(一开始站立的黑砖也要算)。 输入 开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20.每个数据集有H行,其中每行包含W…

    C 2023年4月24日
    00
  • 解析Java中未被捕获的异常以及try语句的嵌套使用

    解析Java中未被捕获的异常以及try语句的嵌套使用 了解Java中未被捕获的异常 在Java中,程序执行过程中的异常分为两种:已被捕获的异常和未被捕获的异常。已被捕获的异常是指程序中的代码通过try-catch语句块捕获并处理了异常,程序可以继续执行。而未被捕获的异常是指程序中的代码未进行异常处理或没有匹配的catch语句块,程序会抛出异常并终止执行。 为…

    C 2023年5月23日
    00
  • C语言实现简单计算器功能(2)

    当我们实现一个简单的计算器功能时,需要考虑以下几个方面: 用户输入的合法性检查 进行算术运算的函数实现 错误处理和提示信息输出 第一步,我们需要先获取用户输入的表达式,并对其进行合法性检查。用户输入的表达式应该是一个合法的算术表达式,不能含有非法字符,比如字母等。我们可以使用正则表达式来判断用户输入的内容是否合法。 示例1: #include <reg…

    C 2023年5月23日
    00
  • 浅谈C语言编程中程序的一些基本的编写优化技巧

    浅谈C语言编程中程序的一些基本的编写优化技巧 作为一种广泛应用于系统编程、操作系统、驱动程序、游戏开发等众多领域的语言,C语言的编写效率和代码质量都尤为重要。在编写C语言程序时,采用一些编写优化技巧可以提高程序的运行效率和代码的可读性、可维护性等多种方面的指标。接下来就让我们来浅谈一下C语言编程中程序的一些基本的编写优化技巧吧。 优化技巧一:减少循环次数 在…

    C 2023年5月22日
    00
  • 你知道C++中new和delete为什么要匹配使用吗

    当我们在使用 C++ 时,经常使用 new 和 delete 这两个运算符来进行动态内存的分配和释放。而这两个函数必须要配对使用。 为什么要匹配使用new和delete 在使用 new 分配内存时,系统会分配一块合适大小的内存空间,并返回一个指向该空间的指针。这时如果使用 delete 将该指针所指向的内存释放掉,但是如果后续仍然有程序对该指针进行操作,就会…

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