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++学习第二天(打卡)的更多相关文章

  1. 深度学习多机多卡解决方案-purine

    未经允许请不要转载,原作者:zhxfl,http://www.cnblogs.com/zhxfl/p/5287644.html 目录: 一.简介 二.环境配置 三.运行demo 四.硬件配置建议 五. ...

  2. 前端学习 第二弹: JavaScript中的一些函数与对象(1)

    前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...

  3. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  4. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  5. python学习第二次笔记

    python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...

  6. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  7. Learning ROS for Robotics Programming - Second Edition(《ROS机器人编程学习-第二版》)

    Learning ROS for Robotics Programming - Second Edition <ROS机器人编程学习-第二版> ----Your one-stop guid ...

  8. 201671010140. 2016-2017-2 《Java程序设计》java学习第二周

                                 学习第二周(Java基本程序设计结构)      这一周,着重学习了Java的简单程序设计实现及运行,通过自己操作,发现Java的程序语法大面 ...

  9. oracle学习 第二章 限制性查询和数据的排序 ——03

    这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7  怎样使用转义(escape)操作符 ...

  10. Python学习-第二天-字符串和常用数据结构

    Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...

随机推荐

  1. 是可忍孰不可忍!!nodepad++作者台独分子,恶毒言论!!!

    本来用了两年这个软件吧,不带任何情感的,单纯辅助工具.直到今天,在GitHub上,发现了这个作者以及一些同党都是一群尼玛生在中国骂中国的狗币. https://github.com/notepad-p ...

  2. 元祖tuple

    1.区别: 列表有序的,可以被修改 元祖一级元素不可以被修改,删除,添加,内部的列表中的元素可以被修改 tu = (5,'gf',58,[65,'hf'],'fdg') tu[3][1]=3562.定 ...

  3. Maven Eclipse 笔记

    1. 下载apache-maven-3.1.1-bin.zip SITE:http://maven.apache.org/download.cgi 2. 配置 M2_REPO= C:\Users\&l ...

  4. Java多线程编程(一)Java多线程技能

    一.进程和多线程的概念以及线程的优点 打开Windo任务管理器可以看到很多正在运行着的exe程序,完全可以将运行在内存中的exe文件理解成进程,进程是受操作系统管理的基本运行单元. 线程可以理解成在进 ...

  5. django-模板之with标签(十二)

    就是给传过来的值取个别名.

  6. js循环和调用

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. Flask:Flask中使用会话技术

    1.会话技术cookie和session (1)cookie 在网站中,HTTP请求是无状态的.也就是说,即使第一次用户访问服务器并登录成功后,第二次请求服务器依然不知道当前发起请求的是哪个用户.co ...

  8. 在虚拟机上的关于FTP FTP访问模式(虚拟用户模式)

    首先你要有vsftpd服务 可以先去yum中下载(当然你要有本地yum仓库) 输入命令: yum  install  vsftpd 下载完成之后打开vsftpd服务 输入命令:systemctl   ...

  9. 医生智能提醒小程序数据库设计心得——Legends Never Die

    数据库设计心得 根据我们小组数据库设计的整个流程,我们将整个数据库设计划分为两个具体的阶段,在每个阶段需要进行不同的准备,有不同的注意事项,接下来我们将结合在数据库设计过程中遇到的一些问题和困难,提出 ...

  10. SCOI2005 繁忙的都市 [Luogu P2330]

    题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...