- 博客(34)
- 收藏
- 关注
原创 从汇编层面理解C++ this指针
中,调用对象的非静态成员函数过程中,编译器会自动添加。上述程序,对象在栈上。如果对象在堆上的情况,即通过。指针作为第一个参数传到非静态成员函数中了。指针作为第一个参数。表示第一/二个参数, 然后调用。看了成员函数的汇编, 再看看。申请的对象,可能会有所不同。可以看到, 编译器确实将。其实就是栈顶,也是对象。第6/7条指令,分别将。指针是如何传进来的。函数中是如何调用的。函数中定义了局部变量。, 表示在栈上申请了。
2024-02-02 10:37:02 599
原创 关于c++中的编译宏_GLIBCXX_USE_CXX11_ABI
若程序使用了不同版本的库,则会有找不到符号的问题。对象共享内存, 只有在其中一个对象被修改时才会申请新的内存。版本禁用了此项功能。从上节中看到,不同版本的。中的编译宏, 用来控制。这个命名空间以示区别。
2023-04-04 10:48:41 1713
原创 由“c++链接错误:未定义的引用“引发的思考
日常的项目开发构建中, 常常出现 未定义的引用的错误。 出现这种错误的原因有很多, 此文描述c++引用c函数导致的问题。示例程序如下:// add.cint add(int a, int b){ return a + b;}// test.cint add(int , int);int main(){ int a = 1; int b = 1; int c = add(a, b); return 0;}编译策略如下:List ite.
2022-05-11 10:23:36 3738
原创 编译原理
gdb编译多个.o文件// test.cc#include<iostream>using namespace std;int t();int main(){ int x = t(); cout << "x: " << x << endl; cout << "Hello World!" << endl; return 0;}// utils.ccint t(){ return
2021-01-08 08:43:03 144 1
原创 C++容器
容器容器分为关联容器和顺序容器。关联容器set的使用一个简单的例子:#include<iostream>#include<set>using namespace std;int main(){ set<int> s; s.insert(1); s.insert(4); s.insert(9); for (set<int>::iterator it = s.begin(); it != s.end
2020-12-23 19:40:34 149 1
原创 Linux多线程
#include <stdio.h>#include <stdlib.h>#include <unistd.h> //Header file for sleep(). man 3 sleep for details. #include <pthread.h>// A normal C function that is executed as a thread // when its name is specified in pthread_cr
2020-08-13 00:27:14 94
原创 C语言知识
const关键字const int *p = &i; // 指针p指向的内容不能通过p被修改int * const p = &i; // 指针p本身的内容无法被修改#include <stdio.h>int main(){ int i = 123; const int *p = &i; // 等价于 int const *p = &i; //*p = 789; // 错误,指针p指向的内容不能通过p被修改 p
2020-08-09 20:31:22 145
原创 编程题目汇总
文章目录DFS473. 火柴拼正方形DFS473. 火柴拼正方形473. 火柴拼正方形int edge_num = 0;int edge_len = 0;bool dfs(int idx, int curr_len, int *nums, int *vis, int numsSize);int cmpfunc (const void * a, const void * b){...
2020-04-14 09:32:15 528
原创 C语言常用库函数
参考:https://www.runoob.com/size_t strlen(const char *str)计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。char *strcpy(char *dest, const char *src)把 src 所指向的字符串复制到 dest。 需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出...
2020-03-01 15:01:44 207
原创 【程序员的自由修养】疑问汇总
问题一:【2.4 模块拼接 -- 静态链接】 一节最后一段中,讲到链接之后,变量var的地址确定下来为0x1000。为什么链接之后var的地址就确定了呢?自问自答: 【1.5 内存不够怎么办】小节中讲到了虚拟内存,是因为可执行程序的虚拟内存都是从0到某个最大值,所以在链接的时候var的虚拟内存其实已经确定了。程序在运行过程中,var的虚拟内存是不会改变的,变更的只是物理内存。因此在链接的...
2018-07-29 15:32:54 163
原创 Java标准输入
在Java中标准输入很简单,但是标准输入没有那么简单,经常用的Scanner类来读取标准输入。 Scanner定义:package java.util;public final class Scannerextends Objectimplements Iterator<String>, Closeable常用的函数nextLine函数public String nextLine()next
2016-02-29 19:47:49 1718
原创 JAVA Stack
在java中,Stack类位于java.util包下,继承Vector类:public class Stack<E>extends Vector<E>Stack类包含了一般栈逻辑相关的方法:public E push(E item)push向栈中添加元素。public E pop()pop是出栈方法,返回栈顶元素并删除栈顶元素,此时栈中元素数目将减少一个。若栈为空时,会发生异常EmptyStack
2016-02-29 16:52:56 417
原创 Leetcode Odd Even Linked List
题意:分组单链表中的奇偶节点,把奇结点置于偶结点之前,奇数结点之间的相对顺序不变,偶数结点之间的相对顺序也不变。注意:是对重新排序结点的顺序,不是针对结点中的数值。方法一图示如下: 初始化奇数结点odd和偶数结点even为链表的第一二个结点执行odd.next = even.next; odd=odd.next; even = even.next;直到链表末尾即可。方法二图示如下: 生成奇数链表
2016-02-20 21:33:44 428
转载 基于比较排序时间复杂度下界
对于nn个待排序元素经过一次比较后,其中两个元素的顺序被确定,所以可能的正确结果剩余n!/2n!/2种;依次类推,直到经过mm次比较,剩余可能性n!/(2m)n!/(2^m)种;直到n!/(2m)≤1n!/(2^m) \le 1时,结果只剩下一种,此时mm为O(nlogn)O(nlogn);根据Stirling’s approximation可知:m=O(nlogn)m = O(nlogn)
2016-01-23 22:31:18 1440
原创 桶排序
桶排序(Bucket sort)是一种排序算法,原理是将数组分到有限数量的桶中,每个桶中的数据再进行排序。当数组元素是均匀分配时,桶排序使用线性时间。桶排序不是基于”比较排序”,所以不受nlognnlogn下限的影响。 基于比较的排序最有时间复杂度为nlognnlogn。 桶排序动画效果参考文献: 桶排序-百度百科 桶排序动画
2016-01-23 21:48:41 432
原创 插入排序
插入排序时一种简单直观的排序算法。思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
2015-03-17 20:00:39 384
原创 排序专题
排序动画排序动画归并排序归并排序利用分治思想,其计算步骤如下:分解:将n个元素平均分成各含n/2个元素的子序列; 解决:用归并排序对两个子序列递归地排序;合并:合并两个已排序的子序列以得到结果。比较直观的归并动态图如下: java代码如下:public class MergeSort{public static void main(String args[]){ int[] da
2015-03-13 19:35:16 407
转载 欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2015-03-13 18:45:19 401
原创 C语言实现快排
void Qsort( int * p_int, int ll, int hh ){ //对地址为p_int+ll 和 p_int+hh 之间的元素实现快排 if( hh > ll + 1 ) { //当有三个或以上元素时 int low = ll + 1; //以ll处的元素为枢纽 int high = hh; //最高索引 while(
2013-11-14 16:40:35 649
原创 指针的低级错误!铭记!
typedef struct LNode{ int data; struct LNode * next;}LNode, * LinkList;void CreateList1( LinkList &L, int n ){//建立n个元素的链表L L = ( LNode * ) malloc( sizeof( LNode ) ); LinkList L1 = L -> next;
2013-07-15 16:20:41 439
原创 C/C++中include
刚开始学习C语言时候就知道include指令,但是对其含义的理解很多时候是模糊的,其精确含义如下(摘自C++语言程序设计第三版): 指令include可以有两种书写方式。#include表示按照标准方式搜索要嵌入的文件,该文件位于C++系统目录include子目录下,一般要嵌入系统提供的标准文件时采用这样的方式,如对标准头文件iostream的包含。另一种书写为#include"文件名",
2013-07-07 16:00:53 626
原创 解读:《C语言解惑》中的难解的指针
在C语言中,指针和数组有着千丝万缕的关系,也是很核心的内容之一,同时也是最难理解的部分。在 《C语言解惑》一书中有一道关于指针的题目,作者说只要能正确地解答之,便说明已经全面地掌握了C语言中指针的用法。让我们先看看源代码:int main() { char * c[] = { "ENTER", "NEW",
2013-05-24 22:41:45 2465
原创 欧几里得算法
今天看到关于求两数最大公约数的帖子,就想起欧几里得算法,但是此算法是怎么证明的呢?一时间还真想不起来了,哎!还是理解的不深刻,现将其证明记录如下,没事时候可以翻翻看。 欧几里得算法又称为辗转相除法,用来计算两个整数(a>b)的最大公约数。 定理:gcd(a,b) = gcd(b,a mod b); 因为a>b,假设a = kb+r, --> r = a mod b;
2013-05-14 23:15:19 577
原创 c++中的错误:error C2601: 'main' : local function definitions are illegal
今天编写一cpp程序,一直编译无法通过,错误是:error C2601: 'main' : local function definitions are illegal。可是怎么看也没有错误,在网上查了老半天终于找到了原因,是头文件的末尾少一个}。而当#include“***.h”时,意思是“***.h”文件中的代码原封不动地放到源文件中,当编译时候就会出现上述错误,说main函数的定义是非法的。
2013-04-28 23:34:38 27692 1
原创 层序输出二叉树
常见的二叉树输出方式是先序,中序和后序;层序输出相对并不常见,先说说我的思想。 二叉树的定义是树中的每个结点至多有两个子树并且有顺序,分别称为左右子树。首先,构造一指针数组并将根节点的地址存入其中(下标为0);若此结点左孩子非空,则将左孩子的地址存入数组(下标为1);同理,若此结点右孩子非空,则将右孩子的地址存入数组(下标为2);对左右孩子施以和根结点同样的动作,重复以上步骤,将会得到相应
2013-04-27 16:38:27 2103
原创 C链表练习时对指针的深刻理解
在做有关链表的练习时,遇到了链表内存错误的问题,最后解决了,在此分享给大家,错误及不足之处,还望大牛们指正。 所作的就是很简单地创建一个链表,并输出其元素,代码如下: 头文件 _List_H.h #include#include#ifndef _List_Htypedef int ElementType ;struct Node;ty
2013-04-05 19:25:24 479
原创 摘自《Data Structures and Algorithm Analysis in C》
学习计算机的学生不学习算法,真的说不过去,学校没有响应的课程,只能自学了,希望能够通过CSDN这个平台和大家讨论问题,能力得到提高,也希望各位大牛不吝赐教。 在许多问题当中,一个重要的观念是:写出一个可以工作的程序并不够。如果这个程序在巨大的数据集上运行,那么运行时间就变成了重要的问题。我们将在本书中看到对于大量的输入,如何估计程序的运行时间,尤其是如何在尚未具体编码的情况下比较两
2013-02-28 21:11:28 433
原创 关于JAVA接口“实例”
今天在看JAVA中如何实现顺序线性表的时候,遇到了点小语法问题,后来解决了,现在写出来一方面便于复习时候看看,另一方面请牛人鉴别我的理解是否正确。 具体的代码如下: A a=new B(); 其中A为接口,B类实现接口A;记得接口好像是不能创建实例的,看到此不得其解。后来在网上查了查,发现是可以这样的,于是编了个小程序检验是否正确:
2012-10-02 20:38:15 368
原创 我也开博客了
作为一名软工专业的学生,看了些那些it大牛们的博客,有很大的启示。以后我会将自己的观点、技术上的总结及生活中有趣的点点滴滴记录在其中。
2012-01-07 21:00:43 233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人