c/c++
hustlx
小硕一枚,兴趣人工智能、机器学习、图像处理。
展开
-
c++面试常见160问
注:所有问题均来源于网络收集1.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?答:首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。extern "C"是连接申明(linkag原创 2016-03-09 21:49:00 · 2408 阅读 · 1 评论 -
C++ hashmap——unordered_map
主要尝试回答下面几个问题:一般情况下,使用 hash 结构,需要有桶的概念,那么 unordered_map 是如何自动管理桶的,这个问题其实再细分的话是这样的:初始的桶是如何设置的当需要扩容的时候,是如何重新分布的对于 string,unordered_map 的默认哈希函数是怎样的代码位于 /usr/include/c++/4.1.2/tr1/,编译器版本比较老,在转载 2016-05-12 22:42:44 · 6029 阅读 · 0 评论 -
c++ map根据value排序以及lamda表达式的应用
vector topKFrequent(vector& nums, int k) { map m; vector> temp; vector res; for (auto n : nums) { m[n]++; } for (auto i : m) { temp.push_back(i); } std::sort(temp.begin(), temp.end(), [](p原创 2016-05-03 10:20:26 · 3379 阅读 · 1 评论 -
二叉树之中序遍历的递归和迭代实现
迭代 --- O(n) time and O(n) space;递归 --- O(n) time and O(n) space ;Morris traversal --- O(n) time and O(1) space!!!迭代算法:vector inorderTraversal(TreeNode* root) { vector res; st原创 2016-05-03 13:02:16 · 814 阅读 · 0 评论 -
2. Add Two Numbers
#include #include #include #include #include using namespace std;struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };ListNode* addTwoNumbers(Li原创 2016-03-07 16:48:40 · 391 阅读 · 0 评论 -
getline(ss, temp, '/')示例
Given an absolute path for a file (Unix-style), simplify it.For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"click to show corner cases.Corner Cases:Did原创 2016-04-02 16:17:47 · 2223 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说原创 2016-05-03 16:14:43 · 1519 阅读 · 0 评论 -
C++string:查找、替换、插入、删除等
要想使用标准C++中string类,必须要包含#include // 注意是,不是,带.h的是C语言中的头文件using std::string;using std::wstring;或using namespace std;下面你就可以使用string/wstring了,它们两分别对应着char和wchar_t。转载 2016-05-04 20:36:08 · 3416 阅读 · 0 评论 -
二叉搜索数
1、构建平衡二叉搜索树TreeNode* sortedArrayToBST(vector& nums, int start, int end){ if(end<=start) return NULL; int mid=(end+start)/2; TreeNode* root=new TreeNode(nums[mid]); r转载 2016-05-04 16:03:31 · 707 阅读 · 0 评论 -
良好的编程习惯与编程要点
正文以良好的方式编写C++ class假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。① Header(头文件)中的防卫式声明complex.h:C++1234567# ifndef __COMPLEX__# define __COMPLEX转载 2016-05-29 22:13:47 · 889 阅读 · 0 评论 -
ListNode示例
ListNode* partition(ListNode* head, int x) { ListNode res(0), mid(0); if (!head) return NULL; ListNode* small=&res; ListNode* big=∣ while (head) { if (head->val <原创 2016-05-17 22:03:57 · 2135 阅读 · 0 评论 -
六大排序算法c++实现
public static void InsertionSort(int[] arr) { int len = arr.length; int i,j; int key; for(j=1;j<len;j++) { key = arr[j]; i=j-1;原创 2016-03-19 11:04:42 · 719 阅读 · 0 评论 -
C/C++中extern关键字详解
C/C++中extern关键字详解1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这转载 2016-04-29 22:26:16 · 439 阅读 · 0 评论 -
c++ 多态
C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定转载 2016-03-09 18:46:06 · 501 阅读 · 0 评论 -
左值与右值
右值:由运算操作(加减乘除函数调用)产生的中间值称为右值,如:a+b,右值是不可以被修改的,也不能被const、volatile修饰。右值是只能出现在等号右边的变量或者表达式。左值:既能出现在等号左边又能出现在等号右边的变量或者表达式。原创 2016-04-29 15:51:23 · 526 阅读 · 0 评论 -
为什么构造函数不能为虚函数
虚函数的意思就是开启动态绑定,程序会根据对象的动态类型来选择要调用的方法。然而在构造函数运行的时候,这个对象的动态类型还不完整,没有办法确定它到底是什么类型,故构造函数不能动态绑定。(动态绑定是根据对象的动态类型而不是函数名,在调用构造函数之前,这个对象根本就不存在,它怎么动态绑定?)如果要保留原来函数的功能,并且还要新添功能的话,可以在子类重载父类的这个函数,并在子类的这个函数中,通过“原创 2016-03-18 12:34:47 · 375 阅读 · 0 评论 -
c++ 字符串和数字相互转化
在C++11中string 类中有stoi、stod、stof、stol和stoll三个函数分别是把字符串转化为int、double、float、long和long、long型。 而数字转字符串则用to_string原创 2016-03-07 16:24:53 · 3515 阅读 · 0 评论 -
c++多行输入(带空格)
#include #include #include #include #include #include #include using namespace std;int main(){ int T; cin >> T; int N; cin >> N; while (T--) { vector name(N);原创 2016-03-18 21:35:24 · 1287 阅读 · 0 评论 -
电子数字
#include#include#include#include#include#includeusing namespace std;int main(){ map*> dic; vector v1 = { 2,3,5,6,7,8,9,0}; vector v2 = {4,5,6,8,9,0 }; vector v3 = { 1,2,3,4,7,转载 2016-03-19 15:50:58 · 539 阅读 · 0 评论 -
线程和进程区别
一、关于进程和线程,首先从定义上理解就有所不同1、进程是什么?是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。2、线程又是什么?线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。在运行时,只是暂用一些计数器、寄存器和栈转载 2016-03-19 17:06:08 · 312 阅读 · 0 评论 -
kmp算法及其c++实现
算法详解请看http://www.cnblogs.com/c-cloud/p/3224788.html下面是我用c++实现的版本:#include #include #include #include #include #include using namespace std;vector makeNext(string P){ int q, k;//q:模版字符串原创 2016-03-16 15:12:12 · 811 阅读 · 0 评论 -
c++中map和unordered_map区别
简单的说,map做插入后是有序的,按照关键字key排序,unordered_map是无序的, 顺序是插入的时候的顺序,但是unordered_map执行效率要比map高很多,所以推荐用unordered_map,下面是测试代码:#include #include #include #include #include using namespace std;int main(){原创 2016-03-24 10:02:00 · 1854 阅读 · 1 评论 -
c++中ceil、round、floor取整
注意,三个函数分别是向上取整、四舍五入取整、向下取整。但是必须确保取整参数是double型相除而不是int型原创 2016-04-07 10:15:18 · 1267 阅读 · 0 评论 -
for循环中有多个限制结束条件的正确写法(小心逗号运算符)
for(i=a,j=b; id; i++,j--){....} 我以前都是把多个条件用 逗号 分隔开写。for(i=a,j=b; id; i++,j--){....}一直没有什么问题。但是今天我做了一个题,一直找不出来错误,我单步调试,最后终于被我发现,就是这种写法错了。原来,我之前的写法其实是逗号运算符, id 结果就是 j>d的结果~~要想限制,必须要加上&&真是转载 2016-03-27 14:41:48 · 2271 阅读 · 0 评论 -
c++中的substr
c++中的substr有别于Java,具体如下:s.substr(start, len);原创 2016-03-15 21:11:16 · 552 阅读 · 0 评论 -
逻辑与优先级高于逻辑或
a||b&&c这个出来的效果可以看做是这样的a||(b&&c),&&优先结合b和c,b和c两个发生作用,而没有去和a发生作用,a是和b&&c这个整体发生作用!而(a||b)&&c恰恰相反!但是计算顺序还是从左到友的!而不是从右到左,原创 2016-03-28 11:04:03 · 3119 阅读 · 0 评论 -
深拷贝和浅拷贝
拷贝有两种:深拷贝,浅拷贝当出现类的等号赋值时,会调用拷贝函数在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的。但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象。所以,这时,必须采用深拷贝。深拷贝与浅拷贝转载 2016-05-11 10:45:21 · 568 阅读 · 0 评论 -
STL之优先队列priority_queue
STL之优先队列原本以为priority_queue很简单,才知道原来懂的只是最简单的形式。头文件:#include优先队列,也就是原来我们学过的堆,按照自己定义的优先级出队时。默认情况下底层是以Vector实现的heap。既然是队列,也就只有入队、出队、判空、大小的操作,并不具备查找功能。函数列表:empty() 如果优先队列为空,则返回真 p转载 2016-05-03 10:37:06 · 1824 阅读 · 0 评论