C++
Alatebloomer
这个作者很懒,什么都没留下…
展开
-
二维动态数组
方法一:new int row,column; cin >> row >> column; //申请空间 int **a = new int* [row]; for(int i = 0; i < row; i++) a[i] = new int[column];方法二:vector i...原创 2018-05-30 13:22:55 · 533 阅读 · 0 评论 -
c++中new_handler
详细可参考 《effective c++》第三版 条款49:了解new_handler的行为当operator new申请一个内存失败的时候,它会进行如下的处理步骤: 1、如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常。 2、继续申请内存分配请求。 3、判断申请内存是否成功,如果成功则返回内存指针,如果失败转向处理步骤1为了自定义这...原创 2018-06-01 13:55:16 · 679 阅读 · 1 评论 -
union
联合(union)是一种特殊的类。一个联合可以有多个数据成员,但在任意时刻只有一个数据成员有值。当我们给union的某个成员赋值之后,该union的其他成员就变成未定义的状态了。分配给一个union对象的存储空间至少要能容纳它的最大的数据成员union不能含有引用类型的成员,除此之外,它的成员可以是绝大多数类型。在C++11新标准中,含有构造函数或析构函数的类类型也可以作为union的成员类型。当...原创 2018-06-29 10:26:26 · 383 阅读 · 0 评论 -
C++临时对象的析构
C++中要特别注意临时对象的析构时间点,不然很容易犯错,甚至不知道错在哪里举个例子#include <iostream>#include<sstream>using namespace std;void print(const char* c){ string str; printf("%s", c);}int main(){ stringstr...原创 2018-07-14 15:56:23 · 1320 阅读 · 0 评论 -
printf可变参数原理
当调用printf时参数的个数是不限定的,那么该函数是如何实现的呢?来看一下该函数的定义 int printf(const char *format,[argument]...)printf的第一个参数就是那个字符指针即为被双引号括起来的那一部分,函数通过判断字符串里控制参数的个数(%d等等)来判断参数个数及数据类型。例如printf("%d,%d",a,b);汇编代码为:.sec...原创 2018-07-31 10:08:22 · 1570 阅读 · 0 评论 -
读取多行数据到vector
要读取多行数据到vector,但是每行的数据个数又不一样,可以用到istringstream,先读取一行字符串,然后转化为字符串流,再从istringstream中读取数据#include<iostream>#include<string>#include<sstream>#include<vector>using namespac...原创 2018-08-05 21:54:04 · 830 阅读 · 0 评论 -
C语言中的几个重要函数
strcmp函数:比较字符串//C/C++函数,比较两个字符串,设这两个字符串为str1,str2,//若str1==str2,则返回零;//若str1<str2,则返回负数;//若str1>str2,则返回正数。int strcmp(const char* str1, const char* str2){ while(*str1 == *str2 &...原创 2018-08-06 11:42:28 · 1408 阅读 · 0 评论 -
五大函数
类和五个特殊的函数紧密联系在一起,它们分别是析构函数destructor,拷贝构造函数(copy construct,移动构造函数(move constructor),拷贝赋值函数(copy assignment operator)和移动赋值函数(copy assignment operator)。当类中含有指针作为数据成员时,默认的拷贝以及析构函数会出现问题,必须自己定义。释放自己定义的动态内存...原创 2018-06-05 17:05:43 · 1515 阅读 · 0 评论 -
自由存储区与堆
自由存储区与堆C++的内存布局:在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区自由存储区与堆有什么区别:malloc在堆上分配的内存块,使用free释放内存,而new所申请的内存则是在自由存储区上,使用delete来释放。很多编译器的new/delete都是以malloc/free为基础来实现的。那么请问:借以malloc实现的new,所申请的内存是在堆上还是...原创 2018-04-07 13:20:16 · 435 阅读 · 1 评论 -
sort对类对象进行排序
C++编程中常需要对对象进行排序,有可能还要根据对象中的多个成员的值进行排序,C++中提供了sort泛型算法便于利用。需要注意的是,sort排序函数不是稳定的,稳定的排序可以用table_sort。稳定是指函数可保证相等元素的原本相对次序在排序后保持不变。sort原型template <class RandomAccessIterator> void sort (RandomA...原创 2018-05-04 13:50:04 · 7887 阅读 · 2 评论 -
虚函数及其继承、虚继承类大小
虚函数与继承空类,空类单继承,空类多继承的sizeof#include <iostream>using namespace std;class Base1{};class Base2{};class Derived1:public Base1{};class Derived2:public Base1, public Base2{};int...原创 2018-05-04 17:21:44 · 403 阅读 · 0 评论 -
#ifndef 和#pragma once
作用:为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别//方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 声明、定义语句 #en...原创 2018-05-07 10:41:39 · 360 阅读 · 0 评论 -
浮点数存储于读取
任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU的架构是小端模式,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为。但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法。 在二...原创 2018-05-14 17:07:47 · 942 阅读 · 0 评论 -
extern C的用法
extern "C"的用法简单来说就是为了方便C与CPP的混合编译。为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 extern “C”的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern “C”后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码...原创 2018-05-15 10:02:57 · 954 阅读 · 0 评论