
c++/c
文章平均质量分 66
overstack
中大研究生喜欢linux后台技术各种架构研究方向是机器学习和数据挖掘
展开
-
warning: deprecated conversion from string constant to "char *"
今天碰到了这个警告,老老实实的google了一下,以下是收获:问题是这样产生的,先看这个函数原型:void someFunc(char *someStr);再看这个函数调用:someFunc("I'm a string!");把这两个东西组合起来,用最新的g++编译一下就会得到标题中的警告。为什么呢?原来char *背后的含义是:给我个字符串,我转载 2012-12-23 11:53:24 · 686 阅读 · 0 评论 -
linux多线程编程基础1
今天突然想看一下linux下的多线程编程,对于多线程编程也有自己的理解,比如多个线程共享所在进程的所有资源,当然对这些资源的访问,有些时候需要我们互斥访问,所以得有线程锁,有时候可能我们需要线程间同步,那么就需要我们使用条件变量和信号量等等,多个线程每个线程都有一个线程栈,用来保存每个线程独有的状态转换,当然这些线程栈都是在进程的地址空间内,只不过他们的地址相互独立而已,当然如果我们能知道其他线程转载 2013-03-18 17:31:55 · 717 阅读 · 0 评论 -
struct和typedef struct
1 首先:A . 在C中定义一个结构体类型要用typedef:typedef struct Student{ int a;}Stu;于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明这里的Stu实际上就是struct Student的别名。另外这里也可以不写Student stu1;B.原创 2013-04-11 00:29:54 · 862 阅读 · 0 评论 -
关于预编译头
许多初学 VC 的朋友也许都为那么一个问题困扰过: 为什么所有的 cpp 都必须 #include "stdafx.h" 也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含。可是,这到底是为什么呢?预编译头有什么用呢? 这得从头文件的编译原理讲起。其实头文件并不神秘,它的全部作用,就是把自己的所有内容直接“粘贴”到相应的 #include转载 2013-04-11 19:55:08 · 644 阅读 · 0 评论 -
C++项目中的extern "C" {}
引言在用C++的项目源码中,经常会不可避免的会看到下面的代码:?123456789#ifdef __cplusplusextern "C" {#endif /*...*/ #ifdef __cplusplus转载 2013-04-11 20:20:41 · 682 阅读 · 0 评论 -
在什么时候需要使用“常引用”?
在什么时候需要使用“常引用”? 如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const 类型标识符 &引用名=目标变量名; 例1 int a ; const int &ra=a; ra=1; //错误 a=1; //正确 例2 stri转载 2013-04-13 15:16:32 · 2109 阅读 · 0 评论 -
2013腾讯实习生笔试错误题目集锦
这篇博客目的只是记录今天笔试本人错误的题目,供后面复习用.并没有泄露试题的意思........1. 32位的机子,下面的说法哪些是正确的? signed char a = 0xe0; unsigned int b = a; unsigned char c = a;A. a>0 && c>0B. a==cC. b的十六进制的表示是:0xffffffe0D原创 2013-04-13 23:21:24 · 2243 阅读 · 7 评论 -
Segmentation fault in Linux
1.什么是“Segmentation fault in Linux”? 我们引用wiki上的一段话来回答这个问题。A segmentation fault (often shortened to SIGSEGV) is a particular error condition that can occur during the operation of computer soft转载 2013-04-15 09:53:12 · 992 阅读 · 0 评论 -
数据段 代码段 堆 栈 BSS
转载 2013-04-18 01:13:38 · 811 阅读 · 0 评论 -
C语言的编译链接过程的介绍
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链转载 2013-04-18 00:50:16 · 833 阅读 · 1 评论 -
将字符串转换成double或者int的实现(c programming language)
直接上代码:/* * ===================================================================================== * * Filename: atof.cpp * * Description: * * Version: 1.0 * Creat原创 2012-12-31 15:16:45 · 1190 阅读 · 0 评论 -
C/C++如何传递二维数组?
用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的)。【以下转帖】----------------------------------------------------------------------------------------------但一般传递二维数组的基本规则好像是这样的:可转载 2012-12-20 20:38:48 · 1023 阅读 · 0 评论 -
浅析malloc()的几种实现方式
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的转载 2013-04-19 10:21:43 · 819 阅读 · 0 评论 -
一个Linux下C线程池的实现
线程池的想法就是:最多开MAX_NUM个线程,将任务链接成链表,每个线程从链表里面拿任务(使用回调函数)完成,完成之后不销毁线程,继续从链表里面拿任务来完成直到所有任务都完成。这样就节省了频繁开启和销毁线程的开销。 什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该转载 2013-04-20 22:03:12 · 628 阅读 · 0 评论 -
数据结构之红黑树
1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:转载 2012-12-27 00:57:05 · 426 阅读 · 0 评论 -
STL map与Boost unordered_map
今天看到 boost::unordered_map, 它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中。所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的。顺序就是按照operator< 定义的大小排序。而boost::unordered_map是计算元素的Hash值,根据Has转载 2013-04-06 14:49:45 · 738 阅读 · 0 评论 -
C++ vector容器类型详解
很久没有碰c++了,导致STL中vector一些常见的用法都忘记了,现在摘录别人的笔记重新回顾一下。vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 :#include 使用vector有两种不同的形式,即所谓的数组习惯和 STL习惯。一、数组习转载 2012-12-24 01:29:00 · 421 阅读 · 0 评论 -
杨氏矩阵查找
1. 简述 杨氏矩阵中,每行元素是递增的,每列元素也是递增的。即a[i][j]复杂度可以达到O(M+N),其中M为矩阵行长度,N为矩阵列长度。2. 原理 从矩阵的左下角或者矩阵的右上角处开始递归运行,以左下角为例,value为要查找的值,(i,j)为当前矩阵中的位置,初始为(M-1, 0)。 如果超过了矩阵范围则说明不存在这样的元素,返回-1,-1。转载 2012-12-24 15:03:47 · 470 阅读 · 0 评论 -
C++ 优先队列用法
最近用近似算法实现旅行商问题,需要首先求解最小生成树,用Prim算法求解最小生成树,需要找割的最小边。于是想到了使用priority_queue,现在把priority_queue用法总结一下,不废话了,总结完了,快点求解TSP。在STL中它的源码如下:class priority_queue{ protected: _Sequenc转载 2012-12-25 22:39:01 · 602 阅读 · 0 评论 -
【Linux开发技术之工具使用】配置VIM下编程和代码阅读环境
本文环境:ubuntu 10.10/vim7.2前言:一年前写过一篇关于VIM的C/C++编程环境的文字,一年中又接触了很多东西,深入使用中发现其实还是需要有很多改正和增强的,当然,VIM社区中也出现了更多好用插件需要整合进来。为了更好的总结整个环境配置方法以及使用方法,特写此文从零开始配置vim环境,主要针对C/C++/Python/Bash编程。基本配置 1) 建立基本环境转载 2012-12-27 13:41:01 · 826 阅读 · 0 评论 -
google面试题5-Balanced Partition
You have a set of n integers each in the range 0 ... K. Partition these integers into two subsets such that you minimize |S1 - S2|, where S1 and S2 denote the sums of the elements in each of the two s原创 2012-12-31 09:49:24 · 1607 阅读 · 0 评论 -
快速排序c实现(代码来自c programming language)
Our version of quick sort is not the fastest possible, but it's one of the simplest. We use the middle element of each sub array for partitioning.#include void swap(int a[], int left, int righ原创 2013-01-01 19:28:03 · 713 阅读 · 0 评论 -
memset函数使用详解
今天做题卡在MEMSET函数的使用上了,本来以为int a[100]; memset(a, MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值.更详细的解说见百度百科 --> http://baike.baidu.com/view/982208.htm 1。void *memset(void *转载 2013-01-03 21:35:34 · 395 阅读 · 0 评论 -
C++箴言:必须返回对象时别返回引用
一旦程序员抓住对象传值的效率隐忧,很多人就会成为狂热的圣战分子,誓要根除传值的罪恶,无论它隐藏多深。他们不屈不挠地追求传引用的纯度,但他们全都犯了一个致命的错误:他们开始传递并不存在的对象的引用。这可不是什么好事。 考虑一个代表有理数的类,包含一个将两个有理数相乘的函数:class Rational { public: Rational(int numerat转载 2012-12-20 20:39:42 · 397 阅读 · 0 评论 -
最长回文子串
/* * ===================================================================================== * * Filename: Longest_Palindromic_Substring.cpp * * Description: * * Version: 1.0原创 2013-01-11 00:59:34 · 548 阅读 · 0 评论 -
矩阵乘法的优化
源于微博上一个同学发了一条微博:“如何对C语言下的矩阵乘法进行优化?我试了几种小技巧,但是发现怎么试都远远比不上MATLAB。”然后他贴了一下他的基本实现方法如下图:基于他的方法,我也做了一下程序实现,代码如下:/* * ==============================================================================原创 2013-01-15 17:37:48 · 851 阅读 · 0 评论 -
C++ STL中哈希表 hash_map介绍
0 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方转载 2013-03-07 10:30:31 · 680 阅读 · 0 评论 -
《编程珠玑》习题-如何用位逻辑实现位向量
《编程珠玑》第一章提到了一个排序问题,具体需求抄在下面:输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=107。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数相关联。输出:按升序排列的输入整数的列表。约束:最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化了。整个解题转载 2013-03-22 15:49:09 · 776 阅读 · 0 评论 -
编程珠玑 第一章习题解答
4.生成[0,n)的之间k个不重复的随机整数。#include#include#include#includeusing namespace std;const int N = 10000000;const int K = 10000000;int randint( int l, int r ){ return rand() % ( r-l ) + l;}转载 2013-03-22 16:29:44 · 986 阅读 · 0 评论 -
C++中虚析构函数的作用
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout "Do转载 2013-04-11 22:09:50 · 647 阅读 · 0 评论