c ++零基础可视化——vector

c ++零基础可视化——vector

初始化
vector<int> v0(5);         // 0 0 0 0 0
vector<int> v1(5, 1);      // 1 1 1 1 1
vector<int> v2{1, 2, 3}    // 1 2 3
vector<int> v3(v1);        // 1 1 1 1 1
vector<vector<int>> v4(2, vector<int>(8, 3));   
//   3 3 3 3 3 3 3 3
//   3 3 3 3 3 3 3 3
auto v5 = vector(2, vector<int>(8, 3));
//   3 3 3 3 3 3 3 3
//   3 3 3 3 3 3 3 3

启发:使用auto可以更好对二位vector进行初始化。

赋值运算,比较运算
vector<int> v0{1, 2, 3};
vector<int> v1;
v1 = v0;
vector<int> v2{1, 2, 4};
v0 < v2;

比较大小:按字典序比较。

vector常用成员函数

v.front()获取vector的第一个元素

v.back()获取vector的最后一个元素

v.size()获取vector的元素个数

v.empty()判断vector是否为空

v.clear()清空vector的数据

v.push_back()将数据塞入vector的末尾

v.pop_back()将数据从vector的末尾移除

v.resize(3)重新定义vector的大小。若比原先小,则删除末尾元素;若比原先大,则用0填充新增的元素;v.resize(5, 1)若有第二个参数,则用第二个参数来填充

v.begin()

v.end()

以下示例仅代表用法,并不是对同一数组进行连续操作,而代表的是每次都对最上面的数组进行操作,即不考虑之前对数组操作的语句对数组的改变。以此来演示语法规则。

vector<int> v{1, 2, 3, 4, 5};
v.erase(v.begin()); //删除1,得到2 3 4 5
v.erase(v.begin() + 1, v.end() + 3) //删除2 3,得到1 4 5    
vector<int> v{1, 2, 3};
v.insert(v.begin(), 4);  //插入4,得到4 1 2 3
v.insert(v.begin + 1, {4, 5, 6});  //插入4 5 6,得到 1 4 5 6 2 3
vector<int> v1(1, 2, 3);
vector<int> v2(4, 5, 6);
v1.insert(v1.end(), v2.begin(), v2.end()); //插入 4 5 6,得到 1 2 3 4 5 6
题目一:https://www.luogu.com.cn/problem/B3688
#include <bits/stdc++.h>

using namespace std;

using LL = long long;

#define endl "\n"

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<int> nums(n);
    for(auto& x : nums) cin >> x;

    do {
        int back = nums.back();
        nums.pop_back();
        nums.insert(nums.begin(), back);
        for(auto& x : nums) cout << x << " ";
        cout << endl;
    }while(nums.back() != n);


    return 0;
}

启发:使用do while语句可以完美契合题意;注意精简代码。

问题二:https://www.luogu.com.cn/problem/B3849
#include <bits/stdc++.h>

using namespace std;

using LL = long long;

#define endl "\n"

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, R;
    cin >> n >> R;

    vector<int> digit;
    while(n) {
        digit.push_back(n % R);
        n /= R;
    }
    reverse(digit.begin(), digit.end());
    for(auto& x : digit) {
        if(x < 10) {
            cout << x;
        } else {
            cout << char(x - 10 + 'A');
        }
    }
    return 0;
}

启发:隐式转换;如何取出数字的每一位。

问题三:https://www.luogu.com.cn/problem/B3766
#include <bits/stdc++.h>

using namespace std;

using LL = long long;

#define endl "\n"

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, T;
    cin >> n >> T;

    vector<int> nums(n);
    vector<int> newNums;

    for(auto& x : nums) {
        cin >> x;
    }

    while(T --) {
        int k;
        cin >> k;
        for(int i = 0; i < k; i ++) {
            for(int j = i; j < n; j += k) {
                newNums.push_back(nums[j]);
            }
        }
        nums = newNums;
        newNums.clear();
    }

    for(auto& x : nums) {
        cout << x << " ";
    }

    return 0;
}

启发:每次选人相当于分成k组。比如:当k = 2时,就会先选出索引为0 2 4 6 8…的人,再选出1 3 5 7 9…的人,先选出来的排在前面,后选出的排在后面。对题面的理解:每次选出的人都应该在第一个人的索引上加上k的倍数。

每次排出新的队伍,就保存在newNums中,再将新队伍newNums赋值给nums,最后将newNums清空。

要加深对数学型题面的理解。本题面加深了我的理解力。

问题四:https://www.luogu.com.cn/problem/B3745
#include <bits/stdc++.h>

using namespace std;

using LL = long long;

#define endl "\n"

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m, r;
    cin >> n >> m >> r;
    vector<int> f1(n), p1(n), f2(n), p2(n);
    for(auto& x : f1) cin >> x;
    for(auto& x : p1) cin >> x;
    for(auto& x : f2) cin >> x;
    for(auto& x : p2) cin >> x;
    
    while(n --) {
        int order;
        cin >> order;
        order --;
        int idx = -1;
        for(int i = 0; i < f2.size(); i ++) {
            if(f2[i] == f1[order] && p2[i] > p1[order]) {
                if(idx == -1 || p2[i] < p2[idx]) {
                    idx = i;
                }
            }
        }
        if(idx != -1) {
            f2.erase(f2.begin() + idx);
            p2.erase(p2.begin() + idx);
        }
    }
    cout << f2.size() << endl;
    return 0;
}
#include <bits/stdc++.h>

using namespace std;

using LL = long long;

#define endl "\n"

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m, r;
    cin >> n >> m >> r;
    vector<int> p1(n), f1(n), p2(n), f2(n);
    vector<int> output(n);

    for(int i = 0; i < n; i ++) {
        cin >> f1[i];
    }
    for(int i = 0; i < n; i ++) {
        cin >> p1[i];
    }
    for(int i = 0; i < n; i ++) {
        cin >> f2[i];
    }
    for(int i = 0; i < n; i ++) {
        cin >> p2[i];
    }
    for(int i = 0; i < n; i ++) {
        cin >> output[i];
    }
    int cnt = 0;
    for(int i = 0; i < n; i ++) {
        int outF = f1[output[i] - 1], outP = p1[output[i] - 1];
        vector<pair<int, int>> temp;
        for(int j = 0; j < n; j ++) {
            if(f2[j] == outF && f2[j] != -1 && p2[j] > outP) {
                temp.push_back({f2[j], p2[j]}); // F P
            }
        }
        int maxMin = 101;
        for(auto& x : temp) {
            if(x.second > outP && x.second < maxMin) {
                maxMin = x.second;
            }
        }
        if(maxMin != 101) {
            for(auto& x : temp) {
                if(x.second == maxMin) {
                    for(int k = 0; k < n; k ++) {
                        if(f2[k] == x.first && p2[k] == x.second) {
                            f2[k] = p2[k] = -1;
                            break;
                        }
                    }
                    break;
                }
            }
            cnt ++;
        }
        temp.clear();
    }
    cout << n - cnt << endl;
    return 0;
}

启发:模拟题,题目不难,显然上面的代码精简。但我的方法很冗长复杂,究其原因还是没有熟练掌握vector的精髓之处。我与其对比,纵观我的代码,我总是想要存储数据,但这完全不必要。而且应用的函数也很少,总是用push_back()。这导致我的方法不够好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920040.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AWTK 最新动态:支持鸿蒙系统(HarmonyOS Next)

HarmonyOS是全球第三大移动操作系统&#xff0c;有巨大的市场潜力&#xff0c;在国产替代的背景下&#xff0c;机会多多&#xff0c;AWTK支持HarmonyOS&#xff0c;让AWTK开发者也能享受HarmonyOS生态的红利。 AWTK全称为Toolkit AnyWhere&#xff0c;是ZLG倾心打造的一套基于C…

CSS+JQuery 实现弹力球效果,碰到屏幕边框弹回

实现弹力球效果&#xff0c;碰到屏幕边框弹回&#xff0c;效果如下 代码如下&#xff1a; <img src"../image/ball.png" alt"" class"ball"> <style>.ball {position: fixed;top: 50vh;left: 50vw;width: 15vw;height: 15vw;border…

银河麒麟V10-SP1-x86_64离线安装Docker

由于要推广信创&#xff0c;需要把Milvus向量数据库从别的平台迁移到信创平台上&#xff0c;为了能顺利迁移&#xff0c;在迁移前需要做一系列用到的功能软件的安装与运行的测试&#xff0c;由于Milvus向量数据库依赖于Docker运行&#xff0c;以及工作性质的要求&#xff0c;只…

vue2 webpack分包实现首屏加载优化

项目打包后得到的vendor.js文件过大&#xff0c;进行拆包以减少文件的大小&#xff0c;具体实现如下&#xff1a; webpack3.x使用new webpack.optimize.CommonsChunkPlugin打包文件分割优化加载 修改项目build内的webpack.prod.conf.js文件&#xff0c;将项目中的需要拆的文件…

125.验证回文串-力扣(LeetCode)

题目&#xff1a; 解题思路&#xff1a; 首先进行移除非字母数字字符&#xff0c;并将大写字符转换为小写字符的操作。这个过程中&#xff0c;主要利用快慢指针的方式来进行移除操作&#xff0c;通过加32将大写字符转换为小写字符。完成后&#xff0c;将前一半的数据与后一半的…

ftrack 24.10全面升级:Autodesk Flame集成与多项新功能性能改进将发布

管理复杂项目绝非易事&#xff0c;但ftrack Studio的最新更新旨在简化这一过程。我们设计了这些增强功能&#xff0c;以优化大家的工作流、提高可用性&#xff0c;并让你们有更多时间专注于创意工作。 让我们来看看都有什么新内容吧&#xff01; ​增强功能来优化工作流 轻松…

深度学习基础—Bleu得分

引言 机器翻译任务中&#xff0c;通常会需要评价指标来评估机器翻译的好坏。仅通过统计翻译词在标准翻译中出现的次数这种方式很不合理&#xff0c;就需要用到Bleu得分来进行评估。 1.n-gram&#xff08;N元组&#xff09; 假设要翻译&#xff1a;Le chat est sur le tapis&am…

【MySQL】InnoDB 基本了解+存储结构

目录​​​​​​​ InnoDB简单了解 InnoDB的特性 InnoDB架构 InnoDB存储引擎创建表的数据文件 MySQL存储结构 表空间文件 用户数据在表空间中存储方式 使用页数据存储单元的原因 数据页 区 表中数据少时如果避免空间浪费 区组 段 页 数据行的组成 快速定位数据…

鸿蒙中服务卡片数据的获取和渲染

1. 2.在卡片中使用LocalStorageProp接受传递的数据 LocalStorageProp("configNewsHead") configNewsHeadLocal: ConfigNewsHeadInfoItem[] [] 注意&#xff1a;LocalStorageProp括号中的为第一步图片2中的键 3.第一次在服务卡片的第一个卡片中可能会获取不到数据…

《Django 5 By Example》阅读笔记:p211-p236

《Django 5 By Example》学习第7天&#xff0c;p211-p236总结&#xff0c;总计26页。 一、技术总结 1.messages(消息推送) django.contrib.messages。 2.OAuth 2 Django里使用的是social-app-django这个package进行认证操作。 3.开发环境使用HTTPS 使用django-extension…

机器学习(贝叶斯算法,决策树)

朴素贝叶斯分类 贝叶斯分类理论 假设现有两个数据集&#xff0c;分为两类 我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率&#xff0c;用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色三角形表示的类别)的概率&#xff0c;那么对于一个新数据点(x,y)…

《设计模式》创建型模式总结

目录 创建型模式概述 Factory Method: 唯一的类创建型模式 Abstract Factory Builder模式 Prototype模式 Singleton模式 最近在参与一个量化交易系统的项目&#xff0c;里面涉及到用java来重构部分vnpy的开源框架&#xff0c;因为是框架的搭建&#xff0c;所以会涉及到像…

【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;本文面向的人群 二&#xff1a;错误场景引入 三&#xff1a;正确场景引入 四&#xf…

论文阅读--supervised learning with quantum enhanced feature spaces

简略摘要 量子算法实现计算加速的核心要素是通过可控纠缠和干涉利用指数级大的量子态空间。本文在超导处理器上提出并实验实现了两种量子算法。这两种方法的一个关键组成部分是使用量子态空间作为特征空间。只有在量子计算机上才能有效访问的量子增强特征空间的使用为量子优势提…

网络安全之信息收集-实战-1

请注意&#xff0c;本文仅供合法和授权的渗透测试使用&#xff0c;任何未经授权的活动都是违法的。 实战&#xff1a;补天公益src“吉林通用航空职业技术学院” 奇安信&#xff5c;用户登录https://www.butian.net/Loo/submit?cid64918 域名或ip&#xff1a;https://www.jlth…

jenkins离线安装插件

Jenkins 在线安装插件失败 报错&#xff1a; Caused: java.io.IOException: Failed to load https://updates.jenkins.io/download/plugins/login-theme/244.vd67c77f0c4c8/login-theme.hpi to /var/jenkins_home/plugins/login-theme.jpi.tmpat hudson.model.UpdateCenter$Up…

MATLAB的语音信号采集与处理分析

1、基本描述 本文描述的系统是一个全面而精细的语音信号处理平台&#xff0c;核心组件由MATLAB的高级功能模块构建而成。系统的核心交互界面&#xff0c;借助于MATLAB的uifigure函数搭建&#xff0c;为用户提供了一个直观且响应迅速的操作环境。通过设计的GUI按钮&#xff0c;如…

【赵渝强老师】MySQL的慢查询日志

MySQL的慢查询日志可以把超过参数long_query_time时间的所有SQL语句记录进来&#xff0c;帮助DBA人员优化所有有问题的SQL语句。通过mysqldumpslow工具可以查看慢查询日志。 视频讲解如下&#xff1a; MySQL的慢查询日志 【赵渝强老师】MySQL的慢查询日志 下面通过具体的演示…

IDEA指定Maven的settings不生效问题处理

文章目录 一、问题描述二、问题分析三、问题解决 一、问题描述 在Idea中手动指定了maven的settings配置文件&#xff0c;但是一直没生效。 如下图&#xff1a;设置加载settings-aliyun.xml文件&#xff0c;但是最后发现还是在加载settings.xml文件 二、问题分析 ‌在Intel…

论文阅读:Uni-ISP Unifying the Learning of ISPs from Multiple Cameras

这是 ECCV 2024 的一篇文章&#xff0c;文章作者想建立一个统一的 ISP 模型&#xff0c;以实现在不同手机之间的自由切换。文章作者是香港中文大学的 xue tianfan 和 Gu jinwei 老师。 Abstract 现代端到端图像信号处理器&#xff08;ISPs&#xff09;能够学习从 RAW/XYZ 数据…