c++STL
hopegrace
取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣!
展开
-
C++ vector的使用、创建及初始化
vector<T> 容器是包含 T 类型元素的序列容器,和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自动增长,从而可以包含任意数量的元素;因此类型参数 T 不再需要模板参数 N。只要元素个数超出 vector 当前容量,就会自动分配更多的空间。只能在容器尾部高效地删除或添加元素。vector<T> 容器可以方便、...原创 2020-04-07 10:16:37 · 784 阅读 · 0 评论 -
32、vector用法总结(定义,操作,方法,注意点)(二)
三、vector的注意点http://www.cuj.com/experts/1910/austern.htm?topic=expertsTheStandardLibrarian:I/OandFunctionObjects:ContainersofPointersMatthewAustern和标准C++运行库中的绝大部分东西一样,标准容器类是用类型来参数...原创 2020-02-04 13:04:30 · 431 阅读 · 0 评论 -
vector用法总结(定义,操作,方法,注意点)(三)
在某些实作上,当你试图创建一个vector<auto_ptr<T>>的时候,会得到编译期错误。这还是算你幸运;如果不幸运的话,事情看起来很好,直到运行期得到不可预知的行为。总之,标准容器类不能与拷贝构造函数不执行拷贝的类型合作。这也不是auto_ptr的设计目的,并且,标准甚至指出“用auto_ptr实例化标准运行库中的容器会得到未定义的行为。”当你需要异常安全机制时,你...原创 2020-02-04 13:03:39 · 611 阅读 · 0 评论 -
标准 C++ 库
标准的C++不仅包含了全部标准C运行库(在原有库的基础上做了一些必要的增补和修改,以便支持安全类型),而且还增加了一些C++自己的库。这些新增的库比标准的C库功能更强,这些C++库包括:1输入输出流库。2语言支持库:包含从C运行库继承的成分,例如:⑴在<climits>和<cfloat>头文件中声明了C++库对&l...原创 2020-02-04 13:00:39 · 180 阅读 · 0 评论 -
35、标准模板类(STL)(一),综述、容器及其操作
C++的STL是一个功能强大的库,它是建立在模板机制上,能够满足用户对存储管理不同类型数据的通用容器和施加在这些容器上的通用算法的巨大需求,并且具有完全的可移植性。因此在寻求程序的解决方案时,应该首先在STL中寻求恰当的容器和算法。STL是一个通用性极高的编程工具,这种通用性不仅表现在可以使用通用的容器存储和管理任意类型的数据,更重要的是可以对不同的容器施加统一通用的算法和操作。实现...原创 2020-02-04 12:59:48 · 381 阅读 · 0 评论 -
标准模板类(STL)(二),具体容器简介
(二)容器的具体介绍A、顺序式容器1、vector该标准容器是一个定义在namespacestd中的模板,该模板的原型声明在头文件<vector>中。它的数据结构很像一个数组,所以与其他容器相比,vector能非常方便和高效访问单个元素。因此,在vector中提供随机访问循环子。说明:实际上就是个动态数组。随机存取任何元素都能在常数时间完成。在尾端增...原创 2020-02-04 12:56:52 · 198 阅读 · 0 评论 -
标准模板类(STL)(三),具体容器简介
5、multimap该标准关联容器是一个定义在namespacestd中的模板,该模板的原型声明在头文件<map>中。multimap除了元素对的关键字不必须唯一外,其他与map相同。6、set该标准关联容器是一个定义在namespacestd中的模板,该模板的原型声明在头文件<set>中。set可以被视为只有关键字(注:H...原创 2020-02-03 10:48:08 · 192 阅读 · 0 评论 -
标准模板类(STL)(四),容器的比较、对比和总结
(三)容器的比较和对比和总结1、若两容器长度相同、所有元素相等,则两个容器就相等,否则为不等。若两容器长度不同,但较短容器中所有元素都等于较长容器中对应的元素,则较短容器小于另一个容器;若两个容器均不是对方的子序列,则取决于所比较的第一个不等的元素。#include<vector>#include<iostream>intmain(){std...原创 2020-02-03 10:45:39 · 634 阅读 · 0 评论 -
标准模板类(STL)(六),举例
三、举例说明在前面介绍过程中,已有相应的例子了。现在在学习几个常用的例子。1、普通指针处理和运用STL的区别Node*currNode=head;while(currNode!=NULL){cout<<currNode->data<<endl;currNode=currNode->next;}...原创 2020-02-03 10:42:23 · 139 阅读 · 0 评论 -
STL 存在的问题
1、代码膨胀C++分别编译过程中以及模板重复实例化引起的代码膨胀有时可能非常惊人。一方面消耗大量的编译时间,另一方面执行时代码过大引起多次的磁盘操作,影响执行速度。2、异常完全和出错信息问题STL不象Java定义了完整的异常。实际上STL只有为数不多的几种异常类型。许多时候导致程序员调试工作大大增加。模板机制套用宏机制,因此只有在真正编译链接时才能看到模板引起的错误消息,...原创 2020-02-03 10:40:19 · 431 阅读 · 0 评论 -
标准模板类(STL)(七),举例续
5、指向类模板成员函数的指针其实函数对象就是提供了operator()重载的对象。C++标准中定义了指向类成员函数的指针。下面举一个例子:#include"iostream"usingnamespacestd;templateclassA{public:Tf(Tt){returnt;}//定义模板类的成员函数};templatestr...原创 2020-02-03 10:36:05 · 122 阅读 · 0 评论 -
map映照容器
set和map都是泛型库对二叉树的一个泛化。一、map的相关原理map映照容器所处理的元素数据,与数据库中的具有键值的记录非常相似,由一个键值和其它若干个数据(映照数据组成),键值和映照数据之间,可建立一个数学上的映照关系。容器的数据结构是采用红黑树进行管理,元素值不允许重复,所使用的节点元素的比较函数,只对元素的键值进行比较,元素的各个数据项可通过键值检索。数据构成如...原创 2020-02-03 10:34:34 · 236 阅读 · 0 评论 -
multimap的相关原理-——(映照容器)
一、multimap的相关原理multimap与map一样,都是使用红黑树对记录型的元素数据按元素键值的比较关系,进行快速的插入、删除和检索操作,所不同的是multimap允许将具有重复键值的元素插入容器。在multimap容器中,元素的键值与元素的映照数据的映照关系,是多对多的,因此,multimap称为多重映照容器。multimap与map之间的多重特性差异,类似于multiset...原创 2020-02-03 10:32:42 · 1777 阅读 · 0 评论 -
vector 向量容器
http://blog.163.com/zhoumhan_0351/blog/static/3995422720102251346407/一、技术原理vector容器是一个线性结构,用3个指针存放向量的起始字节位置、当前最后一个向量元素的末尾字节和整个容器所占用的内存空间的末尾字节,如图所示,3个指针变量分别为M_start、M_finish和M_end_of_storag...原创 2020-02-02 17:49:39 · 179 阅读 · 0 评论 -
Deque双端队列容器
Deque双端队列容器一、基本原理deque的元素数据采用分块的线性结构进行存储,如图所示。deque分成若干线性存储块,称为deque块。块的大小一般为512个字节,元素的数据类型所占用的字节数,决定了每个deque块可容纳的元素个数。所有的deque块使用一个Map块进行管理,每个Map数据项记录各个deque块的首地址。Map是deque的中心部件,将先于deque块,依...原创 2020-02-02 13:15:04 · 361 阅读 · 0 评论 -
queue队列容器
queue队列容器一、原理queue队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(FirstInFirstOut)表。插入一端称为队尾,删除一端称为队首。默认使用双端队列deque来实现,queue也可看成一个容器适配器,将deque容器转换为queue容器。当然,也可以利用其他合适的序列容器作...原创 2020-02-02 13:13:26 · 664 阅读 · 0 评论 -
priority_queue优先队列容器
priority_queue优先队列容器一、原理优先队列也是一种从一端入队,另一端出队的队列。不同于一般队列的是,队列中最大的元素总是位于队首位置,因此总是将当前队列中的最大元素出队。C++STL优先队列的泛化,底层默认采用vector向量容器,使得队列容器的元素可做数组操作,从而应用堆算法找出当前队列最大元素,并将它调整到队首位置,确保最大元素先出队。(堆算法(h...原创 2020-02-02 13:08:10 · 287 阅读 · 0 评论 -
List双向链表容器
List双向链表容器一、原理list是双向链表的一个泛化容器。作为一种序列容器,它的数据元素可通过链表指针串接成逻辑意义上的线性表。不同于采用线性表顺序存储结构的vector和deque容器,list双向链表中任一位置的元素查找、插入和删除,都具有高效的常数阶算法时间复杂度O(1)。为了支持前向和反向访问list容器的元素,如图所示,list采用双向循环的链表结构组织数据元素。...原创 2020-02-01 18:23:18 · 381 阅读 · 0 评论 -
slist双向链表容器
slist双向链表容器一、原理slist为单向链表的泛化容器,与list双向链表容器一样,实现了线性表数据的链表存储,元素数据不必在物理内存中连续分布。slist链表的节点,只有后继的指针,不含前驱的指针。slist为SGIC++STL自设的一个容器,在VisualC++自带的P.J.PlaugerSTL中并不存在。STLport源自于SGIC++STL,但可适用于多种主流编译...原创 2020-02-01 18:21:38 · 296 阅读 · 0 评论 -
bit_vector位向量容器
bit_vector位向量容器一、原理bit_vector位向量容器是一个bit位元素的序列容器,具有vector容器一样的成员函数,常用于硬件端口的控制。区别于vector<bool>的一个重要特性是bit_vector更节省内存空间,一个元素只占用一个bit,而不是一个字节。bit_vector用vector作后缀名,实际与vector并没有任何关联。bit_vecto...原创 2020-02-01 18:16:35 · 1542 阅读 · 0 评论 -
set集合容器
set集合容器一、原理set集合容器使用一种称为红黑树(Red-BlackTree)的平衡二叉检索树的数据结构,来组织泛化的元素数据。每个节点包含一个取值红色或黑色的颜色域,以利于进行树的平衡处理。作为节点键值的元素的插入,必须确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值。不会将重复的键值插入容器,也不需指定具体的插入位置,而按元素在树中的关联关系,进行位...原创 2020-02-01 18:15:26 · 260 阅读 · 0 评论 -
Multiset多重集合容器
Multiset多重集合容器一、基本原理同set,只是允许插入重复元素。插入函数不再用insert_unique了,而是用insert_equal。二、应用1、插入iteratorinsert(iteratorposition,constvalue_type&x);iteratorinsert(constvalue_type&x);2...原创 2020-02-01 18:13:06 · 151 阅读 · 0 评论 -
对回溯算法的理解(以数独游戏为例,使用c++实现)
算法思想:数独游戏的规则:每一行都用到1、2、3、4、5、6、7、8、9位置不限;每一列都用到1、2、3、4、5、6、7、8、9位置不限;每3×3的格子(共九个这样的格子)都用到1、2、3、4、5、6、7、8、9位置不限。游戏的过程就是用1、2、3、4、5、6、7、8、9填充空白,并要求满足每行、每列、每个九宫格都用到1、2、3、4、5、6、7、8、9。实现方法:由于数...转载 2019-07-19 16:49:55 · 596 阅读 · 0 评论 -
逆转容器中的元素 reverse()和reverse_copy()函数 c++标准库函数(algorithm)
函数功能:reverse()会将区间[beg,end)内的元素全部逆序;reverse(beg,end);reverse_copy()会将源区间[sourceBeg,sourceEnd)内的元素复制到"以destBeg起始的目标区间",并在复制过程中颠倒安置次序;reverse_copy()返回目标区间内最后一个被复制元素的下一个位置,也就是第一个未被覆盖的元素;reverse...原创 2019-07-19 11:38:51 · 606 阅读 · 0 评论 -
leetcode 234. 回文链表 c++ 实现
问题描述:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?解决方案:/** * Definition for singly-linked list. * struct ListNode ...原创 2019-07-12 10:26:23 · 217 阅读 · 0 评论 -
448. 找到所有数组中消失的数字 Leetcode c++ 实现
给定一个范围在1 ≤ a[i] ≤ n (n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]解决方案:c...原创 2019-07-06 11:58:18 · 220 阅读 · 0 评论 -
119. 杨辉三角 II leetcode c++实现
问题描述:给定一个非负索引k,其中 k≤33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]进阶:你可以优化你的算法到 O(k) 空间复杂度吗?解决方案:class Solution { public: vector<int> getRow(int rowInd...原创 2019-07-08 14:43:53 · 234 阅读 · 0 评论 -
1、vector用法总结(定义,操作,方法,注意点)(一)
https://blog.csdn.net/hopegrace/article/details/88756312三、vector的注意点TheStandardLibrarian:I/OandFunctionObjects:ContainersofPointersMatthew Austern和标准C++运行库中的绝大部分东西一样,标准容器类是用类型来...原创 2019-03-23 09:32:37 · 656 阅读 · 0 评论