c++中容器之总结篇

yizhihongxing

C++中容器之总结篇

C++标准库提供了多种容器,包括数组、向量、列表、栈、队列、映射表等等。每种容器都有其特有的用途和性能上的差异,选择合适的容器可以保证程序的高效性和正确性。

在本篇攻略中,我们将对C++中的容器进行分类总结,并根据使用场景给出相应的建议和示例。

1. 顺序容器

1.1 数组(array)

数组是一种固定大小的存储元素的容器。在定义数组时必须指定数组大小,而且一旦定义大小就无法改变。

可以通过下标访问数组元素,例如:a[2]表示访问数组a的第3个元素。

示例:

#include <array>
#include <iostream>

int main() {
    std::array<int, 5> arr{1, 2, 3, 4, 5};
    for (int i = 0; i < arr.size(); i++) {
        std::cout << arr[i] << " ";
    }
    // output: 1 2 3 4 5
    return 0;
}

1.2 向量(vector)

向量是一种动态大小的存储元素的容器。可以通过push_back()方法在向量末尾添加元素,通过pop_back()方法移除末尾元素。

可以通过下标访问向量元素,例如:v[2]表示访问向量v的第3个元素。

示例:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec{1, 2, 3, 4, 5};
    vec.push_back(6);
    vec.pop_back();
    for (int i = 0; i < vec.size(); i++) {
        std::cout << vec[i] << " ";
    }
    // output: 1 2 3 4 5
    return 0;
}

1.3 列表(list)

列表是一种双向链表结构的存储元素的容器。可以在容器任意位置插入或移除元素,不受插入或移除操作的影响。

可以通过迭代器访问列表元素,例如:std::list<int>::iterator it = li.begin();表示获取列表li的第一个元素迭代器。

示例:

#include <list>
#include <iostream>

int main() {
    std::list<int> li{1, 2, 3, 4, 5};
    li.push_back(6);
    li.push_front(0);
    li.pop_front();
    std::list<int>::iterator it = li.begin();
    for (; it != li.end(); it++) {
        std::cout << *it << " ";
    }
    // output: 1 2 3 4 5 6
    return 0;
}

2. 关联容器

2.1 集合(set)

集合是一种存储唯一元素的容器,不允许重复元素存在。可以通过insert()方法向集合添加元素,通过erase()方法移除元素。

可以通过迭代器访问集合元素,例如:std::set<int>::iterator it = s.begin();表示获取集合s的第一个元素迭代器。

示例:

#include <set>
#include <iostream>

int main() {
    std::set<int> s{1, 2, 3, 4, 5};
    s.insert(6);
    s.erase(3);
    std::set<int>::iterator it = s.begin();
    for (; it != s.end(); it++) {
        std::cout << *it << " ";
    }
    // output: 1 2 4 5 6
    return 0;
}

2.2 映射表(map)

映射表是一种存储键值对的容器,每个键唯一对应一个值。可以通过insert()方法向映射表添加键值对,通过erase()方法移除键值对。

可以通过下标访问映射表元素,例如:m["a"]表示访问映射表m中键值为"a"的元素。

示例:

#include <map>
#include <iostream>

int main() {
    std::map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
    m.insert({"d", 4});
    m.erase("b");
    std::cout << m["c"] << " " << m["d"] << std::endl;
    // output: 3 4
    return 0;
}

3. 适配器容器

3.1 栈(stack)

栈是一种后进先出(LIFO)的容器。可以通过push()方法向栈顶添加元素,通过pop()方法从栈顶移除元素。

可以通过top()方法访问栈顶元素。

示例:

#include <stack>
#include <iostream>

int main() {
    std::stack<int> s;
    s.push(1);
    s.push(2);
    s.push(3);
    std::cout << s.top() << std::endl; // output: 3
    s.pop();
    std::cout << s.top() << std::endl; // output: 2
    return 0;
}

3.2 队列(queue)

队列是一种先进先出(FIFO)的容器。可以通过push()方法向队列尾添加元素,通过pop()方法从队列头移除元素。

可以通过front()方法访问队列头元素,通过back()方法访问队列尾元素。

示例:

#include <queue>
#include <iostream>

int main() {
    std::queue<int> q;
    q.push(1);
    q.push(2);
    q.push(3);
    std::cout << q.front() << std::endl; // output: 1
    std::cout << q.back() << std::endl; // output: 3
    q.pop();
    std::cout << q.front() << std::endl; // output: 2
    return 0;
}

总的来说,选择合适的容器可以使程序更加高效和简洁,但也需要结合具体场景进行选择。以上就是C++中容器的总结,希望本篇攻略能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++中容器之总结篇 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • linuxctrl+z的使用方法

    Linux Ctrl+Z的使用方法 在Linux系统中,Ctrl+Z是一个非常有用的快捷键。它可以暂停当前正在运行的命令,并将其放入后台,同时返回到命令行提示符下。在这篇文章中,我们将讨论在Linux系统中如何使用Ctrl+Z。 Ctrl+Z的常见用途 Ctrl+Z常用于以下几个场景: 暂停一个正在运行的进程 将一个后台进程切换到前台 终止一个正在运行的进程…

    其他 2023年3月29日
    00
  • 怎么免费激活DA-HelpCreator 附激活教程+注册机

    免费激活DA-HelpCreator的完整攻略如下: 1. 下载DA-HelpCreator软件和注册机 首先,需要下载DA-HelpCreator软件和注册机。可以在官方网站或其他软件下载网站下载,选取适合自己的版本即可。下载完成后先解压软件和注册机,放在一个易于找到的文件夹内。 2. 安装DA-HelpCreator 双击打开DA-HelpCreator…

    other 2023年6月26日
    00
  • composer安装的方法步骤(图文)

    下面是Composer安装的详细攻略: 1. 下载Composer Composer的官方网站提供多种方式下载Composer,可以选择满足个人需求的方式进行下载。 方式一:使用命令行 使用以下命令在终端中下载Composer: php -r "copy(‘https://getcomposer.org/installer’, ‘composer-…

    other 2023年6月27日
    00
  • win8应用程序切换操作方式(常规/快捷键)

    Win8应用程序切换操作既可以通过常规操作,也可以通过快捷键来实现。下面分别介绍这两种方式的具体操作方法。 常规操作 Win8中的应用程序切换操作可以通过鼠标操作实现。具体步骤如下: 首先,打开需要切换的应用程序。可以在开始屏幕中找到该应用程序图标,点击即可打开。 等待应用程序加载完成后,依次点击任务栏中的应用程序图标,即可切换到该应用程序。 如果需要切换到…

    other 2023年6月25日
    00
  • 路由器之vpn应用与配置指南

    以下是关于路由器之VPN应用与配置指南的完整攻略: 什么是VPN? VPN(Virtual Private Network)是一种安全的网络连接方式,可以在公共网络上建立一个私有网络。VPN可以用于保护您的网络流量,使您的网络活动更加安全和私密。 为什么要在路由器上配置VPN? 在路由器上配置VPN可以使所有连接到该路由器的设备都受到VPN的保护。这意味着您…

    other 2023年5月6日
    00
  • 同时接入两条光纤进局域网两种解决方案

    同时接入两条光纤进局域网有两种解决方案,分别是跨VLAN和链路聚合。下面我将分别对这两种方案进行详细讲解,并给出相应的示例说明。 跨VLAN 跨VLAN是指将两个不同的VLAN通过一个交换机进行连接,从而实现两条光纤同时进入局域网的目的。该方案需要保证两个VLAN之间的互通,同时需要在交换机上进行相应的配置。 步骤 在交换机上创建两个VLAN,假设分别为VL…

    other 2023年6月26日
    00
  • Java框架设计灵魂之反射的示例详解

    Java框架设计中的反射是非常重要的一环,它可以让我们在运行时动态地获取并操作对象信息。下面详细讲解“Java框架设计灵魂之反射的示例详解”的完整攻略。 什么是反射 Java反射是指程序可以在运行时动态获取类的信息并操作对象的属性、方法等。在Java中,反射可以通过java.lang.reflect包中的类实现。 反射的用途 反射有很多用途,比如: 动态地创…

    other 2023年6月27日
    00
  • js中redirect

    以下是关于“JavaScript中的重定向(redirect)”的完整攻略: 什么是重定向 重定向是指将用户从URL地址自动跳转到另一个URL地址的过程。在Web开发中,通常用于将用户从一个页面自动跳转到另一个页面,或者将用户从一个网站自动跳转到另一个网站。 重定向的实现方式 在JavaScript中,可以使用以下两种方式实现重定向: 1. 使用locati…

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