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

yizhihongxing

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日

相关文章

  • iOS13.3正式版固件下载地址 iOS13.3正式版支持机型及固件下载

    iOS13.3正式版固件下载地址 iOS 13.3正式版是苹果公司发布的最新操作系统版本之一。在本攻略中,我将为您提供iOS 13.3正式版固件的下载地址,并列出支持该版本的机型。请按照以下步骤进行操作: 步骤一:访问官方网站 首先,您需要访问苹果公司的官方网站以获取iOS 13.3正式版固件的下载地址。您可以在以下网址找到官方下载页面:https://ww…

    other 2023年8月4日
    00
  • Fiddler死活抓不了HTTPS包解决方法

    如果Fiddler无法抓取HTTPS包,可以使用以下步骤进行解决: 步骤一:安装Fiddler根证书 首先确保已安装Fiddler根证书。在Fiddler菜单栏中,点击”Tools”,然后选择”Options”。在弹出的窗口中选择”HTTPS”,勾选”Decrypt HTTPS traffic”。点击”Actions”,选择”Export Root Cert…

    other 2023年6月27日
    00
  • maven学习-初窥门径

    Maven学习-初窥门径 什么是Maven? Maven是一个强大的项目管理工具,用于构建、发布和管理Java项目。它提供了一种标准化的项目结构、依赖管理和构建过程,使得项目的开发和维护更加简单和高效。 Maven的安装和配置 下载Maven:从Maven官网(https://maven.apache.org)下载最新版本的Maven压缩包。 解压Maven…

    other 2023年10月13日
    00
  • 三星Note3可删除程序、可删除软件列表有哪些

    以下是关于“三星Note3可删除程序、可删除软件列表有哪些”的完整攻略: 三星Note3可删除程序 步骤一:打开应用程序列表 首先,我们需要进入三星Note3的应用程序列表。对于大部分三星Note3用户而言,可以在桌面任意位置长按屏幕不放,然后选择“应用程序”选项进行进入。 步骤二:选择需要删除的程序 在应用程序列表中,我们可以看到已经安装到手机上的所有应用…

    other 2023年6月25日
    00
  • dedecms织梦系统数据库表结构详细说明-附表名与字段名

    首先介绍一下DedeCMS织梦系统。DedeCMS织梦系统是一款基于PHP+MySQL的开源内容管理系统,适用于各类网站的建设。 为了更好地了解DedeCMS织梦系统的数据库表结构,我们需要研究一下表结构详细说明。在DedeCMS织梦系统中,一共有50多张数据库表,内部数据结构是非常复杂的。在此我对几个常用的数据库表做出详细的说明,以供参考。 表名称:ded…

    other 2023年6月25日
    00
  • php mysql数据库操作类(实例讲解)

    下面是“PHP MySQL数据库操作类(实例讲解)”的完整攻略。 什么是PHP MySQL数据库操作类? PHP MySQL数据库操作类是一个封装了MySQL数据库操作的类,使用它可以更方便地进行MySQL数据库的连接、查询、插入、更新、删除等操作。它包含了一系列方法和属性,对于需要频繁操作MySQL数据库的Web开发者来说,可以极大地提高开发效率。 如何使…

    other 2023年6月27日
    00
  • 文件夹突然没有名字了是什么原因及解决方法

    以下是针对文件夹突然没有名字的可能原因及解决方法的完整攻略。 1. 原因分析 在Windows等操作系统中,每个文件夹都有一个唯一的名称,在一些情况下,这个名称可能会突然变成空白或者出现不明字符,具体可能的原因如下: 文件夹命名冲突:有可能与其他文件夹重名,在操作系统中出现了命名冲突。 操作系统故障:操作系统出现了一些故障,导致文件夹名称异常。 病毒或恶意软…

    other 2023年6月26日
    00
  • linux如何配置bond

    Linux如何配置Bond Bonding技术是一种基于Linux内核,将多个物理网卡进行绑定,实现负载均衡和容错的网络技术。它在企业级网络中得到了广泛的应用,本文将介绍如何在Linux系统中进行Bonding配置。 步骤一:安装依赖工具 在进行Bonding配置之前,需要安装ifenslave工具,ifenslave是集成在Linux内核中的网络加速模块(…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部