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日

相关文章

  • Ruby的运算符和语句优先级介绍

    Ruby的运算符和语句优先级介绍 运算符优先级 在Ruby中,运算符的优先级决定了表达式中各个运算符的执行顺序。以下是Ruby中常用的运算符按照优先级从高到低的顺序: 括号:()、[]、{} 正负号:+、- 幂运算:** 乘、除、取模:*、/、% 加、减:+、- 比较运算符:<、<=、>、>=、!=、== 逻辑运算符:&&am…

    other 2023年6月28日
    00
  • 怎么把图片转换成ico格式方法大汇总

    当将图片转换为.ico格式时,可以使用多种方法。下面是一个详细的攻略,其中包含两个示例说明: 方法一:使用在线转换工具 打开任意一个在线图片转换网站,例如ConvertICO或ICO Convert。 在网站上找到上传图片的选项,并点击它。 选择要转换的图片文件,并上传到网站。 在转换选项中,选择.ico作为目标格式。 点击“转换”或类似的按钮,开始转换过程…

    other 2023年8月5日
    00
  • vue router学习之动态路由和嵌套路由详解

    Vue Router学习之动态路由和嵌套路由详解攻略 1. 动态路由 动态路由是指根据不同的参数值加载不同的组件或页面。Vue Router提供了一种简单的方式来实现动态路由。 1.1 定义动态路由 在Vue Router中,可以使用冒号(:)来定义动态路由参数。例如,我们可以定义一个动态路由参数为id,如下所示: const routes = [ { pa…

    other 2023年7月28日
    00
  • Mybatis延迟加载的实现方式

    MyBatis是一个Java持久化框架,拥有强大的ORM功能。延迟加载是MyBatis中的一个重要特性,可以有效减少数据库查询次数,提升系统性能。本篇攻略将详细讲解MyBatis延迟加载的实现方式。 什么是MyBatis延迟加载 MyBatis延迟加载是指在查询对象时,只查询对象本身的信息,而不会立即查询对象关联的其他信息。当我们需要使用该关联信息时才再发起…

    other 2023年6月25日
    00
  • 详解Android文件存储

    详解Android文件存储 在Android开发中,经常需要使用文件存储数据。本篇教程将详细介绍Android的文件存储方式,包括内部存储和外部存储。 内部存储 内部存储是指应用程序直接在设备内存中进行数据存储的方式。内部存储的优点是它所存储的数据不会直接暴露给用户,同时也不能被其他应用程序访问和读取。一般情况下,应用程序在内部存储中存储的数据是与应用程序相…

    other 2023年6月26日
    00
  • c++ 类中const成员变量的赋值方法

    让我来详细讲解C++类中const成员变量的赋值方法。 什么是const成员变量 在C++类中,可以使用const关键字定义类的成员变量。const关键字用于指定成员变量的值一旦被初始化就不可改变。这意味着在类的生命周期内,const成员变量的值不会被修改。 例如,我们可以定义一个类Person,其中包含一个const成员变量age: class Perso…

    other 2023年6月26日
    00
  • angular项目中使用antd日历组件

    以下是关于“Angular项目中使用Antd日历组件”的完整攻略,过程中包含两个示例。 背景 Antd是一个基于React的UI组件库但是它也提供了一些Angular组件。其中,Antd的日历组件非常实用,可以帮助我们快速构建日历。本攻略将介绍如何在Angular项目中使用Antd日历组件。 基本原理 在Angular项目中使用Antd日历组,我们需要先安装…

    other 2023年5月9日
    00
  • CSS网格布局的示例代码

    CSS网格布局的示例代码攻略 CSS网格布局是一种强大的布局系统,可以帮助我们创建复杂的网页布局。下面是一个详细的攻略,介绍如何使用CSS网格布局,并提供两个示例说明。 步骤1:创建网格容器 首先,我们需要创建一个网格容器,它将包含我们的网格项。我们可以使用display: grid;属性来定义一个元素为网格容器。例如: .container { displ…

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