C++ 基础函数的介绍及使用(Vector+deque+STL)

C++ 基础函数的介绍及使用(Vector+deque+STL)

Vector

介绍

Vector是一个动态数组,它提供了随机访问和在末尾插入/删除的高效操作。

创建Vector

使用如下代码创建一个Vector:

#include <vector>
vector<int> nums;

此时,nums为空Vector。

返回Vector的大小

使用size()函数可以返回Vector中元素个数。如下代码:

cout << nums.size() << endl;

在Vector中插入元素

使用push_back()函数可以向Vector中插入元素。如下代码:

nums.push_back(10); // 向nums中插入元素10

遍历Vector

如下代码遍历 Vector 中的所有元素:

for (int i = 0; i < nums.size(); i++) {
    cout << nums[i] << endl;
}

示例1:将Vector中的元素排序

#include <algorithm> // 引入sort函数
vector<int> nums = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
sort(nums.begin(), nums.end());   // 对 nums 进行排序
for (int i = 0; i < nums.size(); i++) {
    cout << nums[i] << endl;
}

输出结果:

1
1
2
3
3
4
5
5
5
6
9

deque

介绍

deque是双端队列,它支持在头部和尾部插入/删除元素。

创建deque

使用如下代码创建一个deque:

#include <deque>
deque<int> nums;

此时,nums为空 deque。

返回deque的大小

使用size()函数可以返回 deque 中元素个数。如下代码:

cout << nums.size() << endl;

在deque中插入元素

使用push_back()函数向deque的尾部插入元素,使用push_front()函数向头部插入元素。

遍历deque

如下代码遍历 deque 中的所有元素:

for (int i = 0; i < nums.size(); i++) {
    cout << nums[i] << endl;
}

示例2:使用deque模拟“滑动窗口”算法

题目描述:给定一个大小为n的数组和一个整数k,滑动窗口从数组的最左侧移动到最右侧,每次窗口向右移动k个元素,返回每个窗口内的最大值。

输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
输出: [3,3,5,5,6,7]

实现代码如下:

#include <deque>
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
    deque<int> win; // 模拟滑动窗口
    vector<int> res; // 存放最大值
    for (int i = 0; i < nums.size(); i++) {
        // 删除队列中不在窗口内的值
        if (!win.empty() && win.front() == i - k) {
            win.pop_front();
        }
        // 删除队尾比新元素小的值
        while (!win.empty() && nums[win.back()] < nums[i]) {
            win.pop_back();
        }
        // 新元素插入队尾
        win.push_back(i);
        // 记录窗口内最大值
        if (i >= k - 1) {
            res.push_back(nums[win.front()]);
        }
    }
    return res;
}

STL

介绍

STL是Standard Template Library的缩写,是一组C++标准库函数模板和类模板,用于实现常用数据结构和算法。

STL的三大组件

STL由三大组件组成:容器、算法和迭代器。

容器:包括vector、deque等数据结构,用于存放和处理数据。

算法:包括sort、max等函数模板,用于实现常用算法。

迭代器:用于遍历容器中的元素。

容器

容器是STL的基础组件,包括:

  1. 序列式容器:vector、deque、list、queue等。

记录元素间的线性关系,通过指针或者迭代器实现元素的快速访问。

  1. 关联式容器:set、map、multiset等。

使用二叉树实现元素的排序和查找。

如下是使用list(序列式容器)和set(关联式容器)的示例。

示例3:使用list实现双向队列

#include <list> // 引入list头文件
list<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
nums.push_front(4);  // 在队列头部插入元素
nums.pop_front(); // 删除队首元素
for (auto it = nums.begin(); it != nums.end(); it++) {
    cout << *it << endl;    // 输出整个队列
}

输出结果:

4
1
2
3

示例4:使用set完成整数集合操作

#include <set> // 引入set头文件
set<int> nums;
nums.insert(1);
nums.insert(2);
nums.insert(3);
nums.erase(2);  // 删除元素2
cout << nums.count(2) << endl;  // 0,元素2不存在
cout << nums.count(3) << endl;  // 1,元素3存在

输出结果:

0
1

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 基础函数的介绍及使用(Vector+deque+STL) - Python技术站

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

相关文章

  • Java 方法引用与ambda表达式的联系

    Java 方法引用和Lambda表达式都是Java 8中引入的新特性,它们都是为了简化代码而生的,它们之间有很大的联系。在Java中,方法引用和Lambda表达式都是为了将方法作为参数传递给其他方法来完成一些功能。 Java Lambda表达式 Lambda表达式是一个匿名函数,它可以传递给其他方法作为参数。Lambda表达式通常用于函数式接口中,这些接口只…

    other 2023年6月26日
    00
  • 详解C语言对字符串处理函数的实现方法

    详解C语言对字符串处理函数的实现方法 在C语言中,字符串常常用字符数组和指针表示。对于字符串的处理需要使用字符串处理函数。本文将详细讲解C语言对字符串处理函数的实现方法。 strlen函数 strlen函数用来返回一个字符串的长度,其具体实现方法如下: size_t strlen(const char * str) { size_t len = 0; whi…

    other 2023年6月20日
    00
  • Win10预览版17758怎么手动升级到17763版?

    下面是详细的步骤: 准备工作 在升级之前,请确保做好了以下几个准备工作: 确保你的电脑已经安装了Win10预览版17758。 确保你的电脑连接到了互联网,并且网络连接顺畅。 确保你的电脑没有其他的升级任务在进行中,比如正在下载其他的更新包。 确保你已经备份了重要的数据,以防数据丢失或者数据泄露。 使用Windows Update手动升级 打开开始菜单,点击“…

    other 2023年6月27日
    00
  • java元转分分转元

    以下是关于“Java元转分分转元”的完整攻略,过程中包含两个示例。 背景 在Java开发中,有时需要将元转换为分,或分转换为元。本攻略将介绍如何使用Java实现元转分分转。 基本原理 Java实现元转分分转元的基本原理是通过数学计算实现。具体步骤如下: 元转分:将元数乘以100。 分转元:将分数除以100。 以下是两个Java元转分分转元的例: 示例1 假设…

    other 2023年5月9日
    00
  • React Class组件生命周期及执行顺序

    React Class组件生命周期是React组件在挂载、更新和卸载时所执行的方法集合。这个过程中,React会自动调用这些方法,让我们更好地管理组件的状态和行为。这篇攻略将深入讲解React Class组件生命周期及其执行顺序,以及如何正确使用它们来构建可扩展的React应用程序。 什么是React Class组件生命周期 React Class组件生命周…

    other 2023年6月27日
    00
  • 在JavaScript中模拟类(class)及类的继承关系

    在JavaScript中模拟类(class)及类的继承关系的完整攻略如下: 1. 使用构造函数模拟类 在 JavaScript 中,可以使用构造函数来模拟类的概念。通过定义构造函数,可以创建新的对象,并将该对象的属性和方法定义在构造函数中。以下是一个示例: function Person(name, age) { this.name = name; this…

    other 2023年6月26日
    00
  • Windows11菜单右键全空白怎么办?Win11右键空白没有菜单解决方法

    当你在Windows11系统中右键桌面或者任务栏时,右键菜单出现全空白,无法正常使用,这时候需要进行以下步骤进行解决。 步骤一:使用Powershell进行问题诊断 打开Powershell:按下Win+X组合键,选择“Windows Powershell(管理员)”; 输入以下命令:Get-AppXPackage -AllUsers | Foreach {…

    other 2023年6月26日
    00
  • Java SPI用法案例详解

    下面我将介绍 “Java SPI用法案例详解”的完整攻略。 什么是Java SPI “SPI”是Service Provider Interface的缩写,即“服务提供者接口”。Java SPI是一种动态服务加载机制,它通过在Classpath中查找接口的实现类来发现服务,并自动加载它们。 通过Java SPI机制可以将接口的具体实现和实现类的实例化解耦,扩…

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