C++学习第二天(打卡)
C++ new 可以很方便的 分配一段内存。
比如 int *test= new int ;
int n;
cin>>n;
int * test =new int [n];
可以实现动态分配内存,比c的malloc 简洁多了,
同样也能new 一个 结构体。总之挺方便的。
new 之后 不用了 要用delet free 内存
另外对空指针delete 是安全的。
模板类:vector,也是一种动态数组。
用法 vector<typename> vt {n_elem};
模板类:array,不是动态滴~
用法 array<typename,n_elem> vt {};
C++的for循环多了一种新特性:可以基于范围。
for(double x:nums){
x=x*;
}
在for中 用于循环用的++i 和i++ 前缀格式和后缀格式,前缀格式 就将值加一,然后返回。
但后缀版本会首先复制一个副本,将其加1,然后将其复制的副本返回。
但是经过我 ida 看汇编的结构,确是相反的,这个问题
main proc near ; CODE XREF: _main_0↑j
.text:
.text: var_D8 = byte ptr -0D8h
.text: j = dword ptr -14h
.text: i = dword ptr -
.text:
.text: push ebp
.text: mov ebp, esp
.text: sub esp, 0D8h
.text: push ebx
.text:0041492A push esi
.text:0041492B push edi
.text:0041492C lea edi, [ebp+var_D8]
.text: mov ecx, 36h
.text: mov eax, 0CCCCCCCCh
.text:0041493C rep stosd
.text:0041493E mov [ebp+i],
.text: jmp short loc_414950
.text: ; ---------------------------------------------------------------------------
.text:
.text: loc_414947: ; CODE XREF: _main+↓j
.text: mov eax, [ebp+i]
.text:0041494A add eax,
.text:0041494D mov [ebp+i], eax
.text:
.text: loc_414950: ; CODE XREF: _main+↑j
.text: cmp [ebp+i],
.text: jge short loc_414987
.text: mov esi, esp
.text: push offset j_??$endl@DU?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@@AAV10@@Z ; std::endl<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &)
.text:0041495D mov edi, esp
.text:0041495F mov eax, [ebp+i]
.text: push eax
.text: mov ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@@A.gap0 ; std::basic_ostream<char,std::char_traits<char>> std::cout
.text: call ds:__imp_???$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int)
.text:0041496F cmp edi, esp
.text: call j___RTC_CheckEsp
.text: mov ecx, eax
.text: call ds:__imp_???$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &))
.text:0041497E cmp esi, esp
.text: call j___RTC_CheckEsp
.text: jmp short loc_414947
.text: ; ---------------------------------------------------------------------------
.text:
.text: loc_414987: ; CODE XREF: _main+↑j
.text: mov [ebp+j],
.text:0041498E jmp short loc_414999
.text: ; ---------------------------------------------------------------------------
.text:
.text: loc_414990: ; CODE XREF: _main+AE↓j
.text: mov eax, [ebp+j]
.text: add eax,
.text: mov [ebp+j], eax
.text:
.text: loc_414999: ; CODE XREF: _main+6E↑j
.text: cmp [ebp+j],
.text:0041499D jge short loc_4149D0
.text:0041499F mov esi, esp
.text:004149A1 push offset j_??$endl@DU?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@@AAV10@@Z ; std::endl<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &)
.text:004149A6 mov edi, esp
.text:004149A8 mov eax, [ebp+j]
.text:004149AB push eax
.text:004149AC mov ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@@A.gap0 ; std::basic_ostream<char,std::char_traits<char>> std::cout
.text:004149B2 call ds:__imp_???$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int)
.text:004149B8 cmp edi, esp
.text:004149BA call j___RTC_CheckEsp
.text:004149BF mov ecx, eax
.text:004149C1 call ds:__imp_???$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &))
.text:004149C7 cmp esi, esp
.text:004149C9 call j___RTC_CheckEsp
.text:004149CE jmp short loc_414990
for (i = ; i < ; i++) {
cout << i << endl;
}
for (j = ; j < ; ++j) {
cout << j << endl;
}
恰恰相反。
const 这个标志符的作用也蛮大的,可以防止数据被修改,但是如果是一个指针指向一个变量,这个指针用了const,这样这个指针就不能修改这个数据,但是还是可以通过变量名字修改。
比较有趣的是函数指针,int (*pd)(int ); 可以直接把指针指向函数名就能执行了。用tpyedef 也能定义。挺有趣的。
今天在leetcode 做一道题的时候,遇到了一个问题:
runtime error: member access within null pointer of type 'struct ListNode'
while(l1!=NULL||l2!=NULL){
sum=;
if(l1->next!=NULL) {
y=l1->val;l1=l1->next;
}
if(l2->next!=NULL) {
y=l2->val;
l2=l2->next;
}
我就用了这种方法,后来想了想,看了下别人的,发现这个错误在哪里了,如果l1 或者l2 有一个已经为NULL的时候,这时还能进入while中,但是如果 (l1->next或者l2->next)的时候,那个已经为空的指针就会访问到,但是他是NULL NULL并没有->next利用引用,因为他不是ListNode 结构体。
今天也了解到 hashmap,hashmap 在遍历里面的元素时所用的时间复杂度为O(1);这样在某些题目中可以用空间获取时间来获得最优解。
Map<Integer,Integer> map = new HashMap<>();
map 有不少内置的方法可以使用,还不错。
C++学习第二天(打卡)的更多相关文章
- 深度学习多机多卡解决方案-purine
未经允许请不要转载,原作者:zhxfl,http://www.cnblogs.com/zhxfl/p/5287644.html 目录: 一.简介 二.环境配置 三.运行demo 四.硬件配置建议 五. ...
- 前端学习 第二弹: JavaScript中的一些函数与对象(1)
前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...
- 二、Android学习第二天——初识Activity(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...
- python学习第二讲,pythonIDE介绍以及配置使用
目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...
- python学习第二次笔记
python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】
[中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...
- Learning ROS for Robotics Programming - Second Edition(《ROS机器人编程学习-第二版》)
Learning ROS for Robotics Programming - Second Edition <ROS机器人编程学习-第二版> ----Your one-stop guid ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第二周
学习第二周(Java基本程序设计结构) 这一周,着重学习了Java的简单程序设计实现及运行,通过自己操作,发现Java的程序语法大面 ...
- oracle学习 第二章 限制性查询和数据的排序 ——03
这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7 怎样使用转义(escape)操作符 ...
- Python学习-第二天-字符串和常用数据结构
Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...
随机推荐
- 使用JRebel插件实现SpringBoot应用代码热加载
前言 在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果.那么有没有一种方式能够快速的.自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,在我之前的文章里面 ...
- 07 python学习笔记-写一个清理日志的小程序(七)
#删掉三天前的日志 #1.获取到所有的日志文件, os.walk #2.获取文件时间 android 2019-09-27 log,并转成时间戳 #3.获取3天前的时间 time.time() - 6 ...
- pycharm的使用(day03复习整理)
pycharm的使用 file --> settings --> editor -->general --> change font size .... file --> ...
- text文本样式二
text-transform样式用于将元素的字母全都变成大小 letter-spacing设置字符之间的间距 <html> <head> <style type=&quo ...
- C++学习笔记4_new和delete
1. 默认的new和delete操作符new和delete是和c里面的mlloc和free是一样的,在堆中创建空间.堆中创建的,都要自己释放.C中void test(){ int *p=(int *) ...
- 学习笔记11全局处理程序global.asax
*全局处理程序Clobal.asax只能叫这个名字,不能修改文件名,如果网站没有的话,可以自己添加. *Application[]类似于session,是全局的,Application["k ...
- [考试反思]0828NOIP模拟测试32:沉底
,,190,180,170,170... 倒数第6,75. 啊...再这么下去要失去理想了... 开学翘课停课以来的第一场考试,就考成这鬼模样. 本来还可以凭借那几次高分苟在公共卷总分的第2,这一场直 ...
- CSPS模拟 88
今天我还是个弟弟. 果然唯有AK不可超越.. T1 决策单调性,暴力上整体二分. 极限数据跑的挺快,可是被n<k的脑残测试点qj了.. T2 又是大模拟! T3 想到剩余同种数量的彩球完全等效 ...
- 我们碰到了大麻烦,一个新来的传教士惹恼了上帝,上帝很愤怒,要求我们把圣经(bbe.txt)背熟,直至他说哪个单词,我们就要飞快的回答出这个单词在第几行第几个单词位置。听说你是个优秀的程序员,那么髟助我们完成这个不可能的任务吧
编程任务:1.我们碰到了大麻烦,一个新来的传教士惹恼了上帝,上帝很愤怒,要求我们把圣经(bbe.txt)背熟,直至他说哪个单词,我们就要飞快的回答出这个单词在第几行第几个单词位置.听说你是个优秀的程序 ...
- MySQL57安装与设置
安装MySQL 添加mysql源 [root@localhost ~]# rpm -ivh http://repo.mysql.com//mysql57-community-release-el7-7 ...