
c++基础知识
千里之外z
人生几何?
展开
-
排序算法
1.插入排序 就是一个一个的对已排好序的序列比较,直至找到第一个比它小的数,比它大的数都要向后移一位,O(n*n)void InsertSort(int a[], int len){ for (int i = 1; i len; i++) { int key = a[i]; int j; for (j = i - 1; j >原创 2017-07-31 20:33:01 · 191 阅读 · 0 评论 -
C++中使用clock()函数测试程序时间
c++的头文件ctime/time.h中的库函数clock()提供了测试函数运行时间的方法:1、clock()返回类型为clock_t类型2、clock_t实际为long 类型, typedef long clock_t3、clock() 函数,返回从 开启这个程序进程 到 程序中调用clock()函数 时之间的CPU时钟计时单元(clock tick)数(挂钟时间)转载 2017-11-09 12:52:05 · 19434 阅读 · 1 评论 -
浅拷贝和深拷贝
class A { public: A(char * p1 = NULL) { if (p1 == NULL) { p = new char[1]; p[0] = ‘\0’; } else { p = new原创 2017-08-10 11:02:02 · 161 阅读 · 0 评论 -
容器中的swap
stl:容器中的swap不仅会交换两个容器之间的元素,也会交换容器的大小,可以用这种方法来解决容器中分配的内存远远大于了元素所需要的内存。vector<int> v(100, 10); cout << "befor:" << endl; cout << "size()= " << v.size() << endl; cout << "capacity=" << v.capac原创 2017-08-24 09:52:18 · 688 阅读 · 0 评论 -
c++STL vector扩容过程
class A{public: A(){ cout << "construct" << endl; } A(const A &a){ cout << "copy construct" << endl; } ~A(){ cout << "destruction" << endl; }};int main(void){ vector<A> p; A a;原创 2017-08-09 22:02:28 · 1882 阅读 · 0 评论 -
迭代器
c++ 迭代器自c++11,我们可以用范围for语句循环处理容器中的所有元素。然而有时我们只是要找出一个或者部分元素,不需要处理所有元素,或者希望将这个(被找到的元素)位置存放在某处,以便继续迭代或者其他处理。所以我们需要一个对象表现出容器元素的位置(部分容器可以用下标)。迭代器就是这个对象。迭代器是类模板,但是表现的像指针,重载了指针的一些操作符(这些就不描述了)。和指针不同的是,获取迭代器不是使原创 2017-06-30 15:12:39 · 225 阅读 · 0 评论 -
string的实现
重写了string的构造函数和赋值运算符#include<iostream>using namespace std;class Mystring{private: char * data;public: Mystring(const char * src) { if (src) { data = new cha原创 2017-07-25 17:26:33 · 198 阅读 · 0 评论 -
allocation类(空间配置类)
c++提供了new和delete来管理动态内存空间 new有两个操作:在堆区申请内存空间,在分配的内存空间构造对象 delete两个操作:调用析构函数销毁对象,回收内存例:string *p=new string[10];//构造了10个空类 而有的时候我们不会把这些空间都使用完,这样就产生了额外的对象构造成本,allocator类就是将内存分配和对象构造分离。allocator有四个函数,a原创 2017-08-09 22:31:33 · 799 阅读 · 0 评论 -
智能指针
问题来源:new 出来的对象一般要手动delete,如果发生异常导致程序(函数)过早退出从而没有执行delete,造成内存泄露。智能指针可以解决这个问题,它是将基本类型指针封装成类对象指针(这个类是个模板),并在析构函数里编写delete语句,删除指针指向的内存空间。对于编译器来说,智能指针实际上是个栈对象,在栈对象生命周期结束的时候,会调用析构函数。STL提供了四个类smart_ptr:auto_原创 2017-08-09 20:43:18 · 285 阅读 · 0 评论 -
指针
一、指针和引用 1.指针可以为null,引用不能为null; 2.引用必须得代表某个对象,所以一定要初始化,而指针不必须; 3.指针可以被重新赋值,指向另一个对象,引用却总指向它最初获得的那个对象; string s1(“Nancy”); string s2(“Clancy”)string & rs=s1; //rs 代表s1 string * ps=&s1;//ps指向s1 rs原创 2017-07-02 09:45:53 · 214 阅读 · 0 评论 -
c++构造函数成员初始化赋值和初始化列表
一般来说构造函数初始化列表比赋值要好: 赋值 class A { string x; A(const string y) { x=y; } }; 初始化列表 class A { string x; A(const string y):x(y) { } }; 1.必要性 a.成员是类时,且构造函数带参数只能使用初始化列表(在成员原创 2017-07-24 12:43:53 · 367 阅读 · 0 评论 -
虚拟继承
1.为何要引用虚拟继承(虚拟继承是多重继承中特有的概念,脱离了多重继承就没有存在的意义,而且会降低效率和占用空间) 假设有类A,类B继承A,类C继承A,类D继承B、C,那么D就继承了A两次,为了使只继承一次,采用虚拟继承,一旦采用了虚拟继承,就会引入一个指针指向虚继承的基类。 2.当采用了虚拟继承,单继承中的大多数原则将会被打破,子类也不会继承父类的虚函数指针。 (擦,这个旋转不了,只能歪原创 2017-07-23 21:35:36 · 232 阅读 · 0 评论 -
对象模型(一)
c++语言保证出现在派生类中的基类对象有其完整原样性 例: class A { int val; char c1; }; class B:public:A { char c2; }; sizeof(A)=8; sizeof(B)=12; 原因:可以保证将子类对象复制给基类对象不会出错class A{private: int a; char c原创 2017-07-23 16:58:43 · 386 阅读 · 0 评论 -
C++类的存储及类对象内存结构
http://blog.youkuaiyun.com/fenxinzi557/article/details/51995911转载 2018-03-06 11:41:36 · 389 阅读 · 0 评论