0%

扩容原理概述

  • 新增元素:Vector通过一个连续的数组存放元素,如果集合已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,在插入新增的元素
  • 对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了
  • 初始时刻vector的capacity为0,塞入第一个元素后capacity增加为1
  • 不同的编译器实现的扩容方式不一样,VS2015中以1.5倍扩容,GCC以2倍扩容。
阅读全文 »

一些vector拷贝使用的细节,挖过填过的坑,记录一下。

主要有以下几种方法

初始化构造时拷贝(深复制)

这种拷贝,相当于复制了一份数据,array中的数据不变。 如下

1
2
vector<int> array{3,5,2,6,4};
vector<int> outArray(array);

阅读全文 »

问题情景

在windows下面打开任务管理器,我们会发现,你只能打开一个任务管理器。如果在已打开一个任务管理器的情况下,再次打开任务管理器,系统会调出已经打开的窗口,而不是重新打开新的窗口。在系统中,之多只能存在一个任务管理器的实例。按照一般的思路,我们需要定义一个TaskManager的类(如下)

1
2
3
4
5
class TaskManager
{
public:
TaskManager(){}
}

阅读全文 »

对于C/C++编写的程序,从源代码到可执行文件,一般经过下面四个步骤:

1、预处理:条件编译,头文件包含,宏替换的处理,生成.i文件。

2、编译:将预处理后的文件转换成汇编语言,生成.s文件

3、汇编:汇编变为目标代码(机器代码)生成.o的文件

4、链接:连接目标代码,生成可执行程序

阅读全文 »

智能指针分为三种:shared_ptr, unique_ptr, weak_ptr。本文就是详细介绍一下智能指针,作为笔记,方便理解。

智能指针的作用是动态分配内存,避免内存泄漏。

阅读全文 »