写题过程中碰见的小问题
文章目录
- ++和--
- vector
- 二维vector的初始化
- 数组中最大的数max_element()
- 数组所有元素之和accumulate()
- vector数组去重
- 对pair类型的vector排序
- 对元素都为正整数的vector利用sort默认的升序排列进行降序排列
- 一维数组转二维数组
- size_t和int
- 如何不用临时变量交换两个数?
- 将类函数的形参赋值给同名的类成员变量
++和–
以本题为例形如:
left++ == cols
和 ++left == cols
两者的结果是有区别的,前者不成立、后者成立。(自增自减运算符的优先级很低。。。)
vector
二维vector的初始化
- 可以利用另一个二维数组的大小来初始化目标二维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));
- 和一有区别的是,可以直接通过拷贝构造函数用另一个二维数组直接初始化目标二维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
排序方式是根据 pair
中 first
的值升序排列(默认)。
对元素都为正整数的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]);
}
一直以为 int
和 size_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;
}
写题过程中碰见的小问题相关推荐
- ACM做题过程中的一些小技巧
1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 大数据输入输出时最好不要用cin.cout,防止超时. 2.有时候int型不 ...
- LeetCode刷题过程中的一些小tips
0. 1. 发现没,与数组遍历.当前元素和前后元素大小比较 相关的都用单调栈 2. sql运行顺序查一下(运行顺序依次是from.where.group by.select order by.先根据s ...
- 十大面试问题解惑,秒杀一切HR、技术面试。程序员必读! 最能体现求职者能力的就是面试,能不能拿到Offer,取决于你面试时的表现,只有有准备才能在面试过程中游刃有余。小编收集了10个面试官最爱提的问题
十大面试问题解惑,秒杀一切HR.技术面试.程序员必读! 最能体现求职者能力的就是面试,能不能拿到Offer,取决于你面试时的表现,只有有准备才能在面试过程中游刃有余.小编收集了10个面试官最爱提的问题 ...
- Latex写论文过程中遇到的常见问题
以下我将总结一些我在写论文的过程中遇到的一些小问题: 1. 在写时间复杂度或者定义数据集时,都要用到花体的O(),形如: $\mathcal{O}(NQ)$ and $\mathcal{O}(N^{2 ...
- 在哪里刷题_刷题过程中,这些坑你踩了几个?
练习卷做了一套又一套,题目刷了一遍又一遍,一考试却发现,分数进步并不大,有些同学甚至没有进步.刷刷刷,为什么分刷不上来?你可能掉进了这些刷题误区--一看就会不少同学在做题的过程中遇到不会的题目的时候, ...
- C# JSON使用过程中开发的小工具
我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...
- 扫描过程_整体扫描+材料聚焦方法在审题过程中的运用
在我们做题和审题的过程中,很多有经验的老师和同学们都知道审题的重要性.前面我跟大家分享过了,关于审题的"三审一答"的做题策略.在近期的复习和解题的过程中发现另外一种思路对于我们更好 ...
- 攻防世界杂项(misc)--新手练习区(详解十二道题完结,附件做题过程中使用到的各种工具和网站)
攻防世界杂项(misc)–新手练习区(详解) 第一题:this_is_flag 题目描述:Most flags are in the form flag{xxx}, for example:flag{ ...
- pdffactory 打印字体_pdfFactory使用过程中的一些小技巧
pdfFactory是一款无须通过Acrobat来创建PDF文件的打印机驱动程序,可以将其理解为一款虚拟打印机,我们可以借助它将多种其他格式的文件转为PDF文件. 在学习.工作中有可能需要经常使用pd ...
最新文章
- PHP内核介绍及扩展开发指南—Extensions 的编写
- 服务器堡垒机登录方式
- OS存储器管理(一)
- Golang之channel操作
- pythonargmaxaxis1_详解numpy的argmax的具体使用
- 【pnglib】解析png格式的图像
- OpenGL Subdivision Modes细分模式的实例
- SignalR在React/Go技术栈的实践
- awk if 不包含_linux高级运维必会命令——AWK命令详解及实例分享
- Java中的引用数据类型-BigDecimal
- POI实现大数据EXCLE导入导出,解决内存溢出问题
- 仿真文件的写法(以四位全加器为例)
- java中的静态块static{}及this,super,final的用法总结
- BFS(双向) HDOJ 3085 Nightmare Ⅱ
- Apache/MySQL/PHP 集体升级
- 【2019银川网络赛A:】Maximum Element In A Stack(动态求栈中最大值)
- 计算机硬盘的文件怎么删除文件,如何彻底删除文件?彻底删除硬盘数据的几种方法-电脑教程...
- 【63测试20161111】【BFS】【DP】【字符串】
- 蒙城县有4000多年,夏为禹贡豫州之域
- centos 5.2自动安装的php不支持mysql?
热门文章
- php正则表达式函数案例,PHP正则表达式函数preg_replace用法实例分析
- python中配置opencv_在Windows中安装OpenCV-Python|四
- python array函数_Python 中的range()函数与array()函数
- 计算机学院寝室文明风景线活动,小猿关注 | 营造良好学风 打造和谐宿舍 ——计算机学院开展学风主题教育暨文明宿舍评选活动...
- wince 6.0 pb
- oracle10g rac启动,ORACLE 10G RAC启动与关闭
- php获取跳转后url,php获取跳转后真实url的方法
- shell 脚本比较字符串相等_比较带空格的字符串相等的Shell脚本 如何比较两个.....
- 【转】DIB位图(Bitmap)的读取和保存
- 【转】ADO.Net之SqlConnection、 Sqlcommand的应用学习心得(思维导图,知识解析,案例分析)