C++ STL
文章平均质量分 51
anran_zhou
尔曹身与名俱灭,不废江河万古流
展开
-
C++ STL/ (1) STL概述
STL是C++的一个重要组成部分。我们使用C++的理由,无非3种:C++对C的兼容与扩展C++面向对象C++ STL在本系列blog中,我们就简单的介绍一下STL的用法。什么是STL? STL的全称为standard template library,标准模板库。这个库里面有c++大牛封装的一系列代码。我们学习STL的目的不是分析STL源码然后写出跟STL中一样性能强悍的代码,而是学会使用S原创 2017-03-29 13:49:01 · 430 阅读 · 0 评论 -
C++ STL/ (8) map
map基本概念 什么是map? map是一种关联型容器。map中的元素是按照key-value的方式存储的。也就是说一个map元素包含两个值。且map排序的规则是按key的大小来排序的。map的功能&特点 输入无序,输出按key排序。不能通过iterator去修改map中元素的值,因为这样会破坏排序规则。multimap和map的区别在于:multimap允许出现重复key值。map的原创 2017-04-04 12:35:39 · 441 阅读 · 0 评论 -
C++ STL/ (7) set
预备知识二叉树 树的任意一个结点都最多只有两个结点。二叉搜索树 树的任意一个结点的值都比该结点的左子树中的任意一个结点的值大;同时比该结点右子树中的任意结点的值小。平衡二叉树(红黑树RB-tree是平衡二叉树的一种) 针对二叉搜索树搜索性能不稳定这个问题。我们跟进一步发明了平衡二叉树。平衡二叉树能保证左右子树的高度差小于等于1。这样在查找特点值时不会出现查找左右两子树的开销相差太大的情况。原创 2017-04-02 20:18:49 · 502 阅读 · 0 评论 -
数据结构与算法in C&C++(1)/SWAP
交换是数据结构与算法的基石,本节通过5个方法的实现来谈谈如何实现swap。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>using namespace std; //C和C++可以混在一起,相互兼容int swap_原创 2017-03-14 14:25:43 · 402 阅读 · 0 评论 -
C++ STL/ (6) list
list 基本概念什么是list? C++中的list是一个双向链表。我们知道链表由结点相连接组成。结点分为数据域和指针域。双向链表的指针域有两部分,一个指向前驱结点的首地址,一个指向后继结点的首地址。 list 的特点 list 的元素是动态分配的,不会造成内存的浪费list元素插入删除开销小;list元素存储开销大。以空间换时间。list功能 一张图表示: list原理 list原创 2017-04-02 19:22:24 · 445 阅读 · 0 评论 -
C++ STL/ (5) stack&queue
栈和队列一直是数据结构中的热门话题。STL自然也有对两者的封装。我们在这里谈一些老生常谈的话题。数据结构分为线性结构和非线性结构。线性结构包括受限线性表,一般线性表和广义线性表。受限线性表包括,字符串,栈和队列。广义线性表包括数组和广义表。非线性结构包括集合,树和图。其中树分为一般树和二叉树;图分为有向图和无向图。我们在前面几个blog实现了:字符串,动态数组和双端数组。实际上,我们本节所说的栈就是原创 2017-03-30 23:22:14 · 368 阅读 · 0 评论 -
C++ STL/ (13) 常用遍历算法
STL中的算法由头文件algorithm functional numeric这3个文件组成。STL算法分为质变算法和非质变算法我们将在剩下的blog中讲述STL中常用的一些算法,包括:遍历,查找,排序,拷贝,替换,算术生成,集合算法等内容。本节主要讲述STL中常用的遍历算法。for_each 我们之前讲述函数对象的时候使用过该函数。这里提出需求如下: 定义一个数据类型为int的数组,定义一个原创 2017-04-11 15:38:10 · 437 阅读 · 0 评论 -
C++ STL/ (12) 函数对象适配器
我们在前一节介绍了函数对象的概念,本节介绍基于函数对象的一个概念–函数对象适配器。在讲函数对象适配器之前,我们来讲一讲普通函数,函数对象和函数对象适配器的关系。 普通函数是对程序功能的一种封装。这种封装只提供了方法,却没有提供属性。所以当我们希望使用某些属性时,我们往往使用普通函数的升级版–函数对象。我们可以将常用算法和函数对象结合起来使用,这样能完成更复杂的功能。当我们定义了一个函数对象,而这个原创 2017-04-11 15:08:01 · 628 阅读 · 0 评论 -
C++ STL/ (11) 函数对象
我们在介绍容器set的时候就涉及到了函数对象这个概念,本节就是在原来的基础之上,系统深入的谈一谈STL中的函数对象。函数对象的基本概念函数对象本质上是一个类而不是一个函数函数对象重载了运算符(),从而使对象能够像函数一样的被调用函数对象与普通函数的对比函数对象超出了普通函数的功能,能够保存函数调用状态(如果使用全局变量保存函数调用次数,要给程序加锁,解锁。所以不推荐使用全局变量;而函数对象则能原创 2017-04-09 16:55:10 · 1073 阅读 · 0 评论 -
C++ STL/ (10) 阶段小结--容器的共性以及使用场景
在前面的blog中,我们介绍了顺序容器(string,vector,deque,list,stack,queue)和关联容器(set,multiset,map,multimap)。本节,我们就来总结一下以上这些容器使用中的异同。顺序容器 容器名称 初始化 赋值 元素存取 大小 插入和删除 扩展 string 默认 带参数 拷贝 运算符重载 = /.assgin原创 2017-04-09 13:36:19 · 1310 阅读 · 0 评论 -
C++ STL/ (4) deque
deque是常见的双端数组。用处很广,本节就介绍相关概念并实现一个简单的评委打分系统。deque的基本概念 什么是deque?deque的功能deque的实现方法deque常用APIdeque构造函数deque赋值deque元素存取deque大小deque插入与删除deque应用:评委打分系统deque基本概念 什么是deque? 我们知道vector是一个单口容器,相当于一原创 2017-03-30 09:57:52 · 487 阅读 · 0 评论 -
C++ STL/ (3) vector
本节我们主要讲一下几个部分:vector容器的基本概念什么是vector容器vector容器的功能vector容器的实现原理 vector容器常用APIvector容器构造函数vector赋值vector元素存取vector大小vector插入删除vector的swap方法及小技巧什么是vector? vector是一个单口容器。vector相当于一个动态的数组,可以向其中添加元原创 2017-03-29 23:17:48 · 480 阅读 · 0 评论 -
C++ STL/ (2) string
字符串的处理一直是一个热门话题。 在C中,字符串是不存在的。我们用字符数组和字符指针模拟字符串。 在C++ STL中,我们有了真正的字符串。实际上,C++ stl中的字符串是对传统C中的字符串的封装。新瓶装旧酒。 我们接下来讲一下几个部分:string和C风格字符串的互换。string字符串的初始化string字符串的赋值string字符串元素的存取string字符串的操作原创 2017-03-29 20:38:09 · 512 阅读 · 0 评论 -
C++ STL/ (9) STL容器中数据的传递
我们在前面讲了stl中常见的容器:顺序容器(string,vector,deque,stack,queue,list)和关联式容器(set,map)。 本节主要讨论一下,以上各种容器中,数据是如何传递的。数据的传递的方式主要有一下几种:传值:一份数据,进行值传递,会在内存空间上开辟多份存储空间。涉及拷贝操作。传指针:传递的是数据的地址,不涉及拷贝操作。传引用:跟传指针一样。STL中数据是以原创 2017-04-06 15:41:01 · 969 阅读 · 0 评论