C/C++基础知识
文章平均质量分 52
ShenYounger
这个作者很懒,什么都没留下…
展开
-
C++中各种STL的内部实现
c++中map与unordered_map的区别头文件map:#include < map > unordered_map:#include < unordered_map >内部实现机理map: map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素,因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,故红黑树的效率决定了map的效率。 unorde..原创 2021-02-11 21:40:29 · 394 阅读 · 0 评论 -
C++缺省参数和函数重载
参数的缺省值在C++中参数可以设置缺省值,设置了缺省值之后,这个参数在调用时可以省略。注意:设置缺省值的参数只能是最后的几个参数。也就是说某一个参数一旦设置了缺省值,其后而的参数也必须设置缺省值。例如:f()函数有3个参数,如果只设置第2个有缺省值,这就错了。因为调用时只输入2个参数时,系统不知道究竟是第2个参数还是第3个参数。参数缺省值举例:#include us转载 2015-10-04 20:02:23 · 1586 阅读 · 0 评论 -
assert()函数用法
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#include转载 2015-11-04 22:20:22 · 362 阅读 · 0 评论 -
深入理解指针函数
1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。转载 2015-11-04 22:15:23 · 270 阅读 · 0 评论 -
第一个DLL程序:动态链接库DLL教程,30分钟快速上手
DLL 程序的入口函数是 DllMain(),就像 DOS 程序的入口函数是 main()、Win32 程序的入口函数是 WinMain() 一样。前面我们一直在讲的就是DOS程序。DllMain() 函数的原型为:BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID转载 2015-11-04 18:05:22 · 408 阅读 · 0 评论 -
关于queue和stack没有clear方法
之前写代码的时候,定义了一个queue q,当想清楚q中的元素时,才发现q是没有clear方法的。后来看了一下资料,才发现queue是基于deque实现的,deque有clear方法,queue没有。今儿在stackoverflow发现了这么一段话:A common idiom for clearing standard containers is swapping with an原创 2015-10-03 19:30:56 · 11449 阅读 · 0 评论 -
C语言函数指针变量
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。函数指针变量定义的一般形式为: 类型说明符 (*指针变量名)();其中“类型说明符”表示被指函数的返回值的类型。“(转载 2015-10-04 20:03:03 · 395 阅读 · 0 评论 -
对vector进行sort时,cmp函数的写法
当cmp函数写在类外时,如下:bool comp(Interval a, Interval b) // 注意comp函数可以为static bool或者bool,返回值为bool类型。a.start<b.start为升序{ return a.start < b.start;}class Solution {public: void merge(vector& inter原创 2015-09-07 11:40:38 · 7263 阅读 · 3 评论 -
不用中间变量交换两个数
假如a=20,b=30,怎么不通过中间变量从而交换两个数呢?代码如下:void swap(int& a, int& b) { //注意,这里是引用 a^=b; b^=a; a^=b;}需要注意的一点是,实参a和b不能为同一个数,否则a和b的值将会为0。例如: int a = 20; swap(a, a); cout原创 2015-08-21 19:17:03 · 586 阅读 · 0 评论 -
vector使用中的一个疑惑
之前曾经疑惑下面一段代码: vector> res; vector item; res.push_back(item); item = res[0]; item.push_back(1); res.push_back(item);疑惑的是res中最后包含的数组是[1]和[1]还是[]和[1]。实验了一下,发现是[]和[1]。原创 2015-08-06 12:36:38 · 363 阅读 · 0 评论 -
C++中定义字符串数组
做题的时候,发现可以直接像java一样定义string类型的数组。如下string d2S[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};这样d2S数组就成为了一个跟map很像的东西。map的key为index,value为字符串。原创 2015-09-01 16:31:23 · 3748 阅读 · 0 评论 -
ASCII表
ASCII表共有128个字符,当统计字符串s中各个字符出现的次数时,可以通过空间换时间,开辟一个int 数组进行统计。int sta[128]={0};原创 2015-08-03 20:20:43 · 245 阅读 · 0 评论 -
如何初始化二维数组
If your 2D array has static storage duration, then it is default-initialized to zero, i.e., all members of the array are set to zero.If the 2D array has automatic storage duration, then you can us原创 2015-08-04 00:12:12 · 532 阅读 · 0 评论 -
为什么C++中只有指针和引用才能实现多态?
类似代码如下:class A{public: virtual void Test(){}};class B:public A{public: virtual void Test(){}};B b;A a = b;A * pA = &b;a.Test();pA->Test();大家都知道a.Test调用的是A:转载 2015-10-05 23:49:28 · 3272 阅读 · 0 评论 -
const修饰类的成员函数
用const修饰类的成员函数,可以使函数内不能对任何成员变量修改。不是成员变量可以修改。原创 2015-10-06 08:24:19 · 468 阅读 · 0 评论 -
getchar()函数
int getchar ( void );Get character from stdinReturns the next character from the standard input (stdin).注意:getchar什么字符都会读!!!即便是空白符和换行符,并且一次只读一个字符!!!注意下面一段代码,代码的运行结果入下图所示。当输出字符a并且敲入原创 2015-11-01 13:40:07 · 457 阅读 · 0 评论 -
C风格字符串中需要注意的一点
C风格字符串C风格字符串是用字符型数组存储的,字符串要求其尾部以’\0’作为结束标志。如: char string[ ]=”C++ programming language”;用sizeof来测string长度为25个字节,而实际串本身长度(含空格)为24个字节,多出来的一个就是串结束符’\0’(含0)。printf("%d",sizeof("abc"))的输出为4,原创 2015-11-21 19:54:52 · 406 阅读 · 0 评论 -
strcpy与strncpy的区别
首先看c++ reference中关于strcpy与strncpy的详细说明。参看http://www.cplusplus.com/reference/cstring/strcpy/和http://www.cplusplus.com/reference/cstring/strncpy/。其次在stackoverflow上有一个相关问题:问题:Edit:转载 2015-11-21 15:44:02 · 482 阅读 · 0 评论 -
char** name是什么,如何初始化
指向指针的指针,类似二维数组但不是。用于指向不限个数、不限长度的字符串的组合。比如[张三,李四,王五, 爱新觉罗]名字数量可以不限,名字长度可以不限。C中常用,而C++不常用char **names=(char **)malloc(sizeof(char*)*20); //初始化为保存20个名字names[0]="张三";names[1]="李四";names[2]="转载 2015-10-09 13:21:51 · 4443 阅读 · 0 评论 -
C语言枚举类型
实际问题中,有些变量的取值被限制在一定范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等。C语言提供了一种枚举(Enum)类型,可以列出所有可能的取值。定义形式为:enum 变量名{ 枚举值列表 };这些值也称为枚举元素。注意最后的分号;不能少。例如,列出一个星期有几天:enum week{sun, mon, tue, wed, thu, f转载 2015-11-08 12:43:23 · 626 阅读 · 0 评论 -
C语言位域(位段)
有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如开关只有通电和断电两种状态,用0和1表示足以,也就是用一个二进位。所以C语言又提供了一种数据结构,称为位域或位段。位域在应用开发中较少使用,你可以暂时跳过,遇到相关问题再回来温习。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个区域有一个域名,允许在程序中按域名进行操作。转载 2015-11-08 20:36:34 · 514 阅读 · 0 评论 -
cin不能输入空格
今天做题目的时候,当用cin从stdin读取一行的时候,发现碰到空白符会停止读取。string line;cin >> line;终端输入为EDIT 1 2 4时,发现line的值为EDIT。解决办法是,读完EDIT之后,再多读几次。cin>> x>>y>>z;原创 2015-10-07 17:36:02 · 2572 阅读 · 0 评论 -
不同语言类成员的默认权限
struct默认publicc++ class 默认privatejava class 默认defaultc#默认priavte原创 2015-10-06 18:45:06 · 467 阅读 · 0 评论 -
cmath中的pi
cmath中的pi为:M_PI原创 2015-10-07 15:20:38 · 7347 阅读 · 0 评论 -
C++成员变量的初始化顺序问题
问题来源:由于面试题中,考官出了一道简单的程序输出结果值的题:如下,[cpp] view plaincopyprint?class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){}转载 2015-10-06 15:23:49 · 400 阅读 · 0 评论 -
重载的定义
函数的重载在C++中具有重要作用,重载(overload)不要和后面要学的覆盖(override)混淆起来。重载是指相同的函数名,但参数的类型或个数中只要有所不同,便进行再定义,编译之后重载的函数都具有不同的地址,也就是说虽然函数名相同,实际上是不同的函数,在调用时,编译系统会根据不同之处自动区别是调用哪一个函数。对于普通函数和后面要学的类的成员函数都适用。转载 2015-10-05 20:48:52 · 473 阅读 · 0 评论 -
重载(overload),覆盖(override),隐藏(hide)的区别
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),常常把重载(overload)和覆盖(override)搞错! 我们先来看一些代码及其编译结果。 实例一: #include "stdafx.h"转载 2015-10-05 20:42:32 · 311 阅读 · 0 评论 -
map、set、multiset、multimap的有序性
map、set、multiset、multimap这四种关联容器是有序的。有序的含义是它们按照顺序进行存储。以set为例,插入一些string元素之后,遍历set,会发现输出的string元素是有序的。int main() { set test; test.insert("abc"); test.insert("dbd"); test.insert("dbb")原创 2015-08-28 14:53:34 · 2636 阅读 · 0 评论 -
c++中的quick_sort
qsort(B+i+1,j-i,sizeof(B[0]),cmp);j-i为元素个数,B+i+1为排序起始位置,sizeof(B[0])为每个元素所占的字节数。cmp为比较函数。如下所示:inline int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; }转载 2015-08-28 11:14:19 · 450 阅读 · 0 评论 -
C++将string转化为int或者double
转化为int,有两种方式:string s = "123";int c = atoi(s.c_str());或者int c = stoi(s);将string转化为double,也是两种方式。string s = "123.5";double c = atof(s.c_str())或者double c = stod(s);原创 2015-08-28 11:11:47 · 21294 阅读 · 0 评论 -
将string字符串中的字符转为全部大写或者全部小写
使用中的transform算法。#include #include int main() { std::string s="hello"; std::string out; std::transform(s.begin(), s.end(), std::back_inserter(out), std::toupper); std::cout "hello in up原创 2014-10-20 11:25:00 · 11483 阅读 · 0 评论 -
string的c_str()函数
C++98中c_str()的函数原型为const char* c_str() const;C++11中的原型为原创 2014-10-13 12:39:02 · 924 阅读 · 0 评论 -
如何求当前编译环境下内置类型的最大值和最小值
在C++中,使用#include ,原创 2014-10-13 15:42:50 · 551 阅读 · 0 评论 -
通过C/C++遍历目录下的所有文件
在做关键词提取任务的时候,需要通过用户的搜索日志翻译 2014-10-13 10:09:04 · 722 阅读 · 0 评论 -
去除C++中string前面和后面的空白符
用英文正式表达的话,是trim掉string原创 2014-10-13 15:45:26 · 3079 阅读 · 0 评论 -
string的length()与size()方法有什么区别
正如文档http://en.cppreference.com/w/cpp/string/basic_string中所述,string翻译 2014-10-13 10:42:43 · 13751 阅读 · 0 评论 -
使用iconv批量转换文件编码方式和dos2unix转换文件换行类型
如果要将dos类型的换行符原创 2014-10-13 16:00:19 · 1778 阅读 · 0 评论 -
C风格字符串和string类型的相互转换
1. 对于C风格的字符串比如char*,char str[],转换为string。char*和char str[]类型可以直接转换为string类型。即对于char* chstr,char arstr[],可以直接对string对象进行赋值。比如string str = chstr或者是string str = arstr。2. 对于string转换为char*string提供原创 2014-10-13 11:54:21 · 3216 阅读 · 0 评论 -
C++读取mysql,内存占用过大
之前在公司做关键词抽取的工作,发现一个程序在运行的时候占用内存过大,而与我计原创 2014-10-27 18:26:46 · 1202 阅读 · 0 评论 -
C++ Primer 第四版中文 智能指针部分的一个小疑惑
在C++ Primer第四版,讲智能指针的第424页,有一段关于我原创 2014-10-26 21:07:36 · 604 阅读 · 0 评论