写题过程中碰见的小问题

文章目录

  • ++和--
  • vector
    • 二维vector的初始化
    • 数组中最大的数max_element()
    • 数组所有元素之和accumulate()
    • vector数组去重
    • 对pair类型的vector排序
    • 对元素都为正整数的vector利用sort默认的升序排列进行降序排列
    • 一维数组转二维数组
  • size_t和int
  • 如何不用临时变量交换两个数?
  • 将类函数的形参赋值给同名的类成员变量


++和–

以本题为例形如:
left++ == cols++left == cols 两者的结果是有区别的,前者不成立、后者成立。(自增自减运算符的优先级很低。。。)
在这里插入图片描述
在这里插入图片描述


vector

二维vector的初始化

  1. 可以利用另一个二维数组的大小来初始化目标二维vector:
vector<vector<int>> vc1 = { {1,1} ,{1,1},{1,1} };
int rows = vc1.size();
int cols = vc1[0].size();
vector<vector<int>> vc2(rows, vector<int>(cols, 0));

在这里插入图片描述

  1. 和一有区别的是,可以直接通过拷贝构造函数用另一个二维数组直接初始化目标二维vector:
vector<vector<int>> vc1 = { {1,1} ,{1,1},{1,1} };
vector<vector<int>> vc2 = vc1;

在这里插入图片描述


数组中最大的数max_element()

max_element():
属于头文件 algorithm ,格式 ForwardIterator max_element (ForwardIterator first, ForwardIterator last); 接受同一数组的两个迭代器参数,构成一个迭代器范,返回迭代器范中最大元素的迭代器。


数组所有元素之和accumulate()

accumulate():
隶属头文件 numeric ,格式 T accumulate (InputIterator first, InputIterator last, T init); 接受同一数组的两个迭代器作为参数,以及一个累加和初始值 init ,返回迭代器范和初始值的累加和。


vector数组去重

unique 去重的前提是数组有序,unique 会将所有重复元素放到数组尾部,并返回不重复内容的尾后迭代器,换言之,也就是第一个重复元素的迭代器,那么就可以调用 erase 从第一个重复元素的迭代器开始删除直至 vector 的 尾后迭代器。

#include <algorithm>
sort(ivec.begin(), ivec.end());
ivec.erase(unique(ivec.begin(), ivec.end()), ivec.end());

对pair类型的vector排序

vector<pair<int, int>> vii;
sort(vii.begin(), vii.end());

形如上面的代码,sort 排序方式是根据 pairfirst 的值升序排列(默认)。


对元素都为正整数的vector利用sort默认的升序排列进行降序排列

其实对比使用模板的降序 sort 并没有效率上的提升,只是思维上的开拓。

原理就是把元素都变为相反数—— v[i] 变为 -v[i] ,之后调用 sort(v.begin(), v.end())

但使用的时候反而有些鸡肋,需要将 -v[i] 再变为 v[i] 。因此其适用于特殊情况,如 lc506. 相对名次。

vector<pair<int, int>> vii;
for(int i=0; i<n; i++){vii.push_back(make_pair(-score[i], i));
}
sort(vii.begin(), vii.end());

一维数组转二维数组

主要是通过 emplace_back 直接构造一维数组,加入到二维数组中。

// 将一维数组 original 转为 m 行 n 列的二维数组
vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) {int sizes = original.size();vector<vector<int>> v;if(sizes != m*n) return v;for(auto beg=original.begin(); beg!=original.end(); beg += n){v.emplace_back(beg, beg+n);}return v;
}

size_t和int

for(int i = popped.size() - 1; i >= 0; i--){s_out.push(popped[i]);
}for(size_t i = popped.size() - 1; i >= 0; i--){s_out.push(popped[i]);
}

一直以为 intsize_t 没有什么大区别,结果如上所示,第二种写法是错误的,因为 size_t 必须保存 大于等于 0 的数,而 -- 操作会使 i 最终的值 小于0 ,因此运行时会出现错误。


如何不用临时变量交换两个数?

int a = 1;
int b = 2;
/*方法1*/
a = a + b; //新a=原a+原b
b = a - b; //新b=新a-b=原a+原b-原b=原a
a = a - b; //新新a=新a-新b=原a+原b-新b=原a+原b-原a=原b/*方法2 ^ 按位异或 异曲同工*/
a = a ^ b;
b = a ^ b;
a = a ^ b;

将类函数的形参赋值给同名的类成员变量

有这样的代码:

class Solution{int a;
public:void fun(int a){}
};

如果在fun函数内,我想将调用时, 实参a 传给 形参a 的值赋给 类的成员变量a,该怎么办呢?

这就牵扯到了以前提到过的this指针的知识,以前讲过,this指针指向调用当前函数的对象,而 调用fun函数的对象 也就是 Solution的对象 。而我们想要进行的操作也是将 形参a的值 赋给 调用当前函数的对象其成员a ,因此可以这样实现:

void fun(int a){this->a = a;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode——二叉树序列化与反序列化

文章目录题目思路问题一问题二代码实现题目 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。 设计一个算法来实现二叉树的序列化与反序列化。不限定序列 / 反序列化算法执行逻辑&#xff0c;你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序…

jsp中生成的验证码和存在session里面的验证码不一致的处理

今天在调试项目的时候发现&#xff0c;在提交表单的时候的验证码有问题&#xff0c;问题是这样的&#xff1a;就是通过debug模式查看得知&#xff1a;jsp页面生成的验证码和表单输入的页面输入的一样&#xff0c;但是到后台执行的时候&#xff0c;你会发现他们是不一样的&#…

求1~n这n个整数十进制表示中1出现的次数

文章目录题目思路代码复杂度分析题目 输入一个整数 n &#xff0c;求1&#xff5e;n这n个整数的十进制表示中1出现的次数。 例如&#xff0c;输入12&#xff0c;那么1&#xff5e;12这些整数中包含1 的数字有1、10、11和12。可得1一共出现了5次。 思路 将个位、十位……每位…

求数字序列中的第n位对应的数字

文章目录题目思路代码复杂度分析致谢题目 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中&#xff0c;第5位&#xff08;从下标0开始计数&#xff09;是5&#xff0c;第13位是1&#xff0c;第19位是4&#xff0c;等等。 请写一个函数&#xff0c…

一学就废的归并排序

文章目录其他与排序有关的文章原理代码实现复杂度分析其他与排序有关的文章 一学就废的三种简单排序【冒泡、插入、选择】 原理 归并排序&#xff08;Merge sort&#xff09;&#xff1a; 归并排序对元素 递归地 进行 逐层折半分组&#xff0c;然后从最小分组开始&#xff0c…

树状数组的相关知识 及 求逆序对的运用

文章目录树状数组概念前缀和和区间和树状数组原理区间和——单点更新前缀和——区间查询完整代码离散化sort函数unique函数去重erase函数仅保留不重复元素通过树状数组求逆序对树状数组概念 树状数组又名二叉索引树&#xff0c;其查询与插入的复杂度都为 O(logN)&#xff0c;其…

二叉搜索树相关知识及应用操作

文章目录概念查找二叉搜索树的第k大节点概念 二叉查找树&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff08;又名&#xff1a;二叉搜索树&#xff0c;二叉排序树&#xff09;——它或者是一棵空树&#xff0c;或者是具有下列性质的二叉树&#xff1a; 若它的…

二叉树相关知识及求深度的代码实现

文章目录树二叉树满二叉树和完全二叉树二叉树的性质代码实现求二叉树的深度树 树是一种非线性的数据结构&#xff0c;它是由n个有限结点组成一个具有层次关系的集合。 树的相关名词&#xff1a; 根节点&#xff1a;没有前驱结点的结点。父节点&#xff0c;子节点&#xff1a…

大端小端存储模式详解及判断方法

文章目录大小端模式的概念两种模式出现原因两种模式的优劣大小端的应用情景判断机器的字节序大小端模式的概念 当我们查看数据在内存中的存储情况时&#xff0c;我们经常会发现一个很奇怪的现象&#xff0c;什么现象呢&#xff1f; int main() {int i 12;return 0; }数据在内…

Linux 内存管理 | 物理内存、内存碎片、伙伴系统、SLAB分配器

文章目录物理内存物理内存分配外部碎片内部碎片伙伴系统(buddy system)slab分配器物理内存 在Linux中&#xff0c;内核将物理内存划分为三个区域。 在解释DMA内存区域之前解释一下什么是DMA&#xff1a; DMA&#xff08;直接存储器访问&#xff09; 使用物理地址访问内存&am…

Linux 内存管理 | 虚拟内存管理:虚拟内存空间、虚拟内存分配

文章目录虚拟地址空间用户空间内核空间用户空间内存分配malloc内核空间内存分配kmallocvmalloc虚拟地址空间 在早期的计算机中&#xff0c;程序是直接运行在物理内存上的&#xff0c;而直接使用物理内存&#xff0c;通常都会面临以下几种问题&#xff1a; 内存缺乏访问控制&a…

Linux | 编译原理、gcc的命令参数、自动化构建工具 make/Makefile

文章目录编译原理预处理编译汇编链接gcc的常用命令参数make 和 Makefile 的概念make的运行通配符自动化变量伪目标.PHONE:【命令】编译原理 在解释 makefile 前&#xff0c;首先解释一下 .c 文件变成 .exe 文件要经过的四个步骤——预处理、编译、汇编和链接&#xff08;参考来…

Linux | 进程概念、进程状态(僵尸进程、孤儿进程、守护进程)、进程地址空间

文章目录进程和程序操作系统如何控制和调度程序进程控制块–PCB子进程进程状态僵尸进程孤儿进程守护进程&#xff08;精灵进程&#xff09;进程地址空间引言页表进程和程序 程序&#xff1a; 一系列有序的指令集合&#xff08;就是我们写的代码&#xff09;。进程&#xff1a;…

Linux 进程控制 :进程创建,进程终止,进程等待,程序替换

文章目录进程创建进程等待程序替换进程终止进程创建 fork函数&#xff1a; 操作系统提供的创建新进程的方法&#xff0c;父进程通过调用 fork函数 创建一个子进程&#xff0c;父子进程代码共享&#xff0c;数据独有。 当调用 fork函数 时&#xff0c;通过 写时拷贝技术 来拷贝…

Linux 内存管理 | 连续分配方式 和 离散分配方式

文章目录前言连续分配单一连续分配分区式分配固定分区分配动态分区分配可重定位分区分配离散分配分段分页多级页表快表(TLB)段页式Linux前言 Linux 内存管理 | 虚拟内存管理&#xff1a;虚拟内存空间、虚拟内存分配 Linux 内存管理 | 物理内存、内存碎片、伙伴系统、SLAB分配器…

操作系统 | 用户态和内核态的切换(中断、系统调用与过程(库函数)调用)

文章目录中断过程调用系统调用过程调用和系统调用的区别中断 用户态、内核态之间的切换是怎么实现的? 用户态→内核态 是通过中断实现的。并且 中断是唯一途径 。核心态→用户态 的切换是通过执行一个特权指令&#xff0c;将程序状态字 (PSW) 的标志位设置为 用户态 。 中断…

管道实现父子进程的信息传递(二)【标准流和其文件描述符、fwrite函数、perror函数】

文章目录代码实现标准流 和 标准流文件描述符代码中用到的函数fwrite()perror()在复习进程间的通信方式时又写了一遍&#xff0c;和 管道实现父子进程的信息传递&#xff08;一&#xff09;【fork函数、pipe函数、write/read操作、wait函数】 的区别不是特别大&#xff0c;只是…

命名管道实现进程的信息传递【mkfifo函数、open函数】

文章目录代码实现mkfifo函数open函数代码实现 #include<fcntl.h> // open() #include<sys/wait.h> // wait() #include<sys/types.h> // mkfifo() #include<sys/stat.h> // mkfifo() #include<iostream> #include<unistd.h> // fork()usi…

Linux 进程 | 进程间的通信方式

文章目录管道匿名管道 pipe命名管道 FIFO共享内存共享内存的使用流程&#xff1a;消息队列信号量套接字在之前的博客中讲过&#xff0c;虚拟空间出现的其中一个目的就是解决 进程没有独立性&#xff0c;可能访问同一块物理内存 的问题。因为这种独立性&#xff0c;进程之间无法…

Linux网络编程 | socket介绍、网络字节序与主机字节序概念与两者的转换、TCP/UDP 连接中常用的 socket 接口

文章目录套接字socket 地址通用 socket 地址专用 socket 地址网络字节序与主机字节序地址转换TCP/UDP 连接中常用的 socket 接口套接字 什么是套接字&#xff1f; 所谓 套接字 (Socket) &#xff0c;就是对网络中 不同主机 上的应用进程之间进行双向通信的端点的抽象。 UNIX/L…