RACx0

  • Home

  • Tags

  • Archives

C++接口与实现分离

Posted on 2018-08-23

在C++中,存在这样一个令人烦恼的现象

假设

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Test.h
class Test
{
Test(){}
Method(){}
}
//main.cpp
#include "test.h"
int main()
{
Test t;
t.Method();
return 0;
}

编译完成后,如果我们修改了Test Class的内容,那么我们需要把所有文件再次编译,因为我们修改了Test.h的内容,而Test.h正好被main.cpp所包含

既然如此,那么有没有办法让我们就算改变了实现也只用编译单个文件然后重新链接即可的方法呢?

Read more »

STL之Vector

Posted on 2018-08-14 | Edited on 2018-08-21

vector是STL中最常用的序列式容器,vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容乃新元素

vector的实现技术,关键在于对大小的控制以及重新配置时的数据移动效率

Read more »

STL之Deque

Posted on 2018-08-14 | Edited on 2018-11-30

deque是双向开口的,可以在头部插入/删除,也可以在尾部插入/删除,而且都是常数时间的复杂度

而这得益于deque的其结构,deque是由多段线型空间组合而成,可以随时增加一段新的空间并连接起来

因此可以把deque看作是一个链表,而每一个链表节点则是一个数组

虽然deque也提供Random Access Iterator,但是这并不是普通的指针,可以的话尽量使用vector

Read more »

STL之List

Posted on 2018-08-14 | Edited on 2018-08-21

List的好处学过数据结构都知道,List对空间的使用十分精准,绝不浪费,而且插入和移除元素的成本很低

但是如果需要经常访问元素,那么效率可能就不如Vector

Read more »

C++ 模版编程

Posted on 2018-08-09 | Edited on 2018-08-21

最近在写一个C++调用Python的库,可以说把我所学到的关于模版的知识都用上了

真的是,用起来越简单的东西,做起来就越难

Read more »

cmake学习笔记-1

Posted on 2018-08-09 | Edited on 2018-08-21

因为Clion是用cmake来构建工程的,特地学一些简单的东西

Read more »

STL Allocator

Posted on 2018-08-06 | Edited on 2018-08-21

前言

在c++中,可以使用new在堆上构建一个新的对象,其实new包含两个步骤

  • 分配内存
  • 使用constructor在内存中构建对象内容

而delete也是如此

  • 调用deconstructor将对象析构
  • 释放内存

知道了new和delete的原理,可以手动模拟一下

Read more »

Configure Vim On Mac

Posted on 2018-08-04 | Edited on 2018-08-21

一直都觉得网上很火的SpaceVim用起来没那么顺手

主要是装的东西太多了,所以最近都在用atom

不过今天突然想卸掉SpaceVim用一下另一个配置spf13-vim,于是有了此文

Read more »

The Semantics Of Data

Posted on 2018-07-30 | Edited on 2018-10-23

Class Data

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>

class A {};

class B : public virtual A {};

class C : public virtual B{};

int main() {
std::cout << "Size Test" << std::endl;
std::cout << "A:" << sizeof(A) << std::endl;
std::cout << "B:" << sizeof(B) << std::endl;
std::cout << "C:" << sizeof(B) << std::endl;
std::cout << "A Pointer:" << sizeof(A*) << std::endl;
return 0;
}

为什么?既然是空的类,那么更应该是0才对

然而输出的时候,A=1,B=8,C=8

不难理解,B和C存在vtpr,因此会占用4byte,而A并不是空,它存在隐藏的1byte

Read more »

initialization member list

Posted on 2018-07-25 | Edited on 2018-10-22

initialization member list

当以下情况,适于使用initialization member list对其进行初始化

  • 初始化一个reference member
  • 初始化一个const member
  • 初始化constructor具有参数的base class
  • 初始化constructor具有参数的member class
Read more »
12345

OriginalS

45 posts
17 tags
GitHub
© 2020 OriginalS
Powered by Hexo v3.8.0
|
Theme – NexT.Muse v6.4.2