《STL源码剖析》深入剖析理解

目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

前言
标准程序库和STL概论
空间配置器解析

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 目录
    • 前言 标准程序库和STL概论 空间配置器解析
  • 前言
  • 标准程序库和STL概论
  • 第二章 空间配置器解析
    • PJ 空间配置器


前言

SGI(Silicon Graphics, Inc.)版本的C++ STL(Standard Template Library)是C++标准模板库的一个经典实现,它由Alexander Stepanov和Meng Lee于1994年设计开发,并最初发布在SGI的IRIX操作系统上。SGI STL在很大程度上影响了后来C++标准中STL的设计和实现。

学习SGI版本的C++ STL可以帮助你深入理解STL的核心概念和数据结构,下面是一些学习重点:

  1. 容器(Containers):SGI STL实现了各种常用的容器,如vector、list、deque、set、map等。学习它们的底层数据结构和实现原理,包括如何管理内存、数据存储方式、迭代器设计等。
  2. 迭代器(Iterators):迭代器是STL的核心之一,它提供了一种统一的方式来遍历容器中的元素。了解SGI STL中迭代器的设计和实现,包括迭代器的种类(input iterator、output iterator、forward iterator、bidirectional iterator、random access iterator),以及如何在容器中使用它们。
  3. 算法(Algorithms):SGI STL实现了大量的算法,如排序、查找、复制、删除等。学习这些算法的实现原理,以及它们如何与容器和迭代器进行交互,可以帮助你更好地理解STL的功能和性能。
  4. 仿函数(Functors):SGI STL中广泛使用了仿函数(也称为函数对象),它们是实现了operator()的类对象,可以像函数一样被调用。学习仿函数的设计和使用,可以帮助你了解STL中很多算法的灵活性和通用性。
  5. 分配器(Allocators):SGI STL中的容器使用了分配器来管理内存分配和释放。学习分配器的实现,包括如何定制自己的分配器,可以帮助你了解STL在内存管理方面的优化和可扩展性。
  6. 空间配置器(Memory Allocators):SGI STL中使用了空间配置器来进行底层的内存分配和释放,它是STL中内存管理的关键部分。学习空间配置器的实现,包括如何处理内存碎片和提高内存分配效率,是了解STL性能优化的重要一环。
  7. 内存管理和性能优化:SGI STL在内存管理和性能优化方面做了很多工作,学习它们的设计思路和实现方法,可以帮助你在自己的代码中做出更好的设计和优化决策。

标准程序库和STL概论

提示:这里可以添加本文要记录的大概内容:
《STL源码剖析》是由侯捷所著,是一本经典的C++ STL源码解析书籍,它深入剖析SGI版本的C++ STL源代码,解释了STL各个组件的实现原理和设计思路。以下是该书第一章的重点概述:标准程序库(Standard Library):
介绍C++标准程序库的概念和组成部分,包括STL、I/O流、字符串处理、数值处理等组件。
强调STL是标准程序库中的一个重要组成部分,它为C++程序员提供了强大的泛型编程工具。
STL的优势:

简化代码:STL允许使用泛型编程,使得代码更加简洁、灵活且易于维护。
提高效率:STL中的算法和数据结构都经过高度优化,可以提高程序的执行效率。
高度可移植性:STL的实现是独立于具体平台的,因此代码可以在不同的编译器和操作系统上运行。
STL的组成:

容器(Containers):包括vector、list、deque、set、map等,用于存储和管理数据。
算法(Algorithms):包括排序、查找、复制、删除等算法,用于操作容器中的数据。
迭代器(Iterators):用于遍历容器中的元素,提供一种统一的访问方式。
仿函数(Functors):类似于函数的对象,用于封装操作,作为算法的参数。
适配器(Adapters):用于调整容器或迭代器接口,使其能够适配特定需求。
STL的基本设计思想:

泛型编程:通过模板技术实现泛型算法和数据结构,使得它们适用于多种数据类型。
封装性:STL中的各个组件都封装在独立的类或函数中,使得代码易于重用和维护。
可扩展性:STL允许用户自定义容器、迭代器和仿函数,从而满足特定的需求。
STL的实现方式:

STL的设计和实现主要基于模板元编程(Template Metaprogramming)和模板特化(Template Specialization)。
涉及到的一些技术和概念包括:迭代器设计、分配器(Allocators)、空间配置器(Memory Allocators)等。
第一章主要介绍了C++标准程序库的概念、STL的优势和组成部分,以及STL的基本设计思想和实现方式。它为后续章节深入探讨STL的各个组件奠定了基础,对于理解STL的核心思想和学习STL的源码具有重要的意义。

第二章 空间配置器解析

PJ 空间配置器

容器需要配置空间来存放数据。 空间配置器最本质的四个功能:

allocator 申请空间
deallocator 释放空间
construct 构造对象
destroy 摧毁对象
#pragma once
这是PJ版本的STL空间配置器,并没有完全遵守STL规则。 
#include
using namespace std;

namespace CC {
	template
	T* _allocate(size_t n, T*) {			
		set_new_handler(0);				//防止申请内存空间失败
		T* tmp = (T*)::operator new(sizeof(T) * n);		//malloc
		if (tmp == 0) {
			cerr << "out of memory" << endl;
			exit(1);
		}
		return tmp;
	}
	template
	void _deallocate(T* p) {
		::operator delete(p);
	}
	template
	void _construct(T* p,const T& value) {
		new(p) T(value);				//将value作为初始值开辟一块空间指向p
	}

	template
	void _destroy(T* p) {
		p->~T();		
	}

	template
	class Alloctor
	{
	public:
		pointer allocate(size_type n, const void* hint = 0) {		//申请空间
			return (pointer)_allocate(n, 0);  
		}
		void deallocate(pointer p, size_type n) {					//释放空间
			_deallocate(p);
		}
		void construct(pointer p, const T& value) {					//构造对象
			_construct(p,value);
		}
		void destroy(pointer p) {									//摧毁对象	
			_destroy(p);
		}
	public:
		typedef T value;
		typedef T* pointer;
		typedef const T& const_pointer;
		typedef T& reference;
		typedef const T& const_reference;
		typedef const size_t  size_type;
	};
}

你可能感兴趣的:(c++,开发语言,STL)