stl

c++ STL容器初探

最后都变了- 提交于 2020-04-08 00:56:21
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案”。 容器还有另一个特点是容器可以自行扩展。在解决问题时我们常常不知道我们需要存储多少个对象,也就是说我们不知道应该创建多大的内存空间来保存我们的对象。显然,数组在这一方面也力不从心。容器的优势就在这里,它不需要你预先告诉它你要存储多少对象,只要你创建一个容器对象,并合理的调用它所提供的方法,所有的处理细节将由容器来自身完成。它可以为你申请内存或释放内存,并且用最优的算法来执行您的命令。 容器是随着面向对象语言的诞生而提出的,容器类在面向对象语言中特别重要,甚至它被认为是早期面向对象语言的基础。在现在几乎所有的面向对象的语言中也都伴随着一个容器集,在C++ 中,就是标准模板库(STL )。 和其它语言不一样,C++ 中处理容器是采用基于模板的方式。标准C++ 库中的容器提供了多种数据结构,这些数据结构可以与标准算法一起很好的工作,这为我们的软件开发提供了良好的支持! 通用容器的分类 STL

STL标准模板库

只愿长相守 提交于 2020-04-08 00:29:32
Vector: 写vector时候碰到这样一段代码: for(int j=0;j<v1.size();j++) { printf("%d %d",j,v1[j]); printf("%d",v1.size()); if(v1[j]==4) { v1.insert(v1.begin(),5); //在访问元素之前插入元素,那么元素的顺序整体就后面移动一位,那么一直访问到的都是4 j++; } getchar(); } Notice: 如果在遍历中需要插入删除元素,那么v1.size不能固定下来,否则会遗漏尾部的元素,在插入之后注意把迭代器或者索引向后移动一位,这样才会指向插入前那个元素的位置。在由迭代器加1指向下一个元素。 其实VECTOR本质上是一个可以容纳任何类型的动态数组。他用到了C++的动态数组,本质上是一个数组,存放在连续的区域,由此可以知道,中间插入或者删除会导致内存区域整块地移动,这样效率很低。所以Vector适合那些经常需要随机访问的类型,当让在末尾push_back,pop_back的速度是很快的,不会导致内存区域的整片移动。 // settest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<set> #include<algorithm> #include<iterator> using

3D打印开放工具链-开源而且免费

陌路散爱 提交于 2020-04-07 13:15:58
开源的3D打印开放工具链 : 3D打印机 :DreamMaker,由DFRobot生产,这是中国很早做创客产品的机构。是实现同样精度的成本最低的产品了,非常酷,而且易于学习。 基础建模软件 :OpenSCAD,以程序的方式进行建模,思路独到,使用方便。背后是开发了将近二十年的CGAL三维几何布尔运算库。如果不想用SolidEdge这样的昂贵的庞然大物,OpenSCAD是个很好的选择。 二维草图软件 :inkscape,名气很大的哦。可以与CorelDraw相比较的草图绘制工具。 图像处理软件 :GIMP,这个不用说了。功能堪比Photoshop,但是开源、免费的。 三维建模软件 :Blender,快速窜红的三维软件,不亚于昂贵的Maya。 模型打印软件 :Cura,大名鼎鼎的Ultimaker出的,很好用。 由于不同软件使用自己的文件存储格式,要制作完成一个模型,需要在几种文件格式之间多次转换(现在还没有完全集成化的工具平台,只能这样了哦!)。 scad/3DS\.X\DXF,模型文件:很多三维建模软件都输出这些格式,比较通用。但是3D打印需要明确模型内部哪些是空洞、哪些是填充,还有就是连接处如果是实的,一定要确保拓扑连接上,不仅仅是视觉上是连在一起的,都需要进行处理。 STL,切片文件:很多建模软件可以直接输出STL文件了,但不同软件的效果是不一样的,需要自己试试找出好使的

Read newline using stream C++

牧云@^-^@ 提交于 2020-04-07 10:34:56
问题 How do I also read a new line using C++ >> operator? ifstream input("doc.txt".c_str()); vector<string> contents; while (input >> word) { contents.push_back(word); } For a file: hello world C++ is the best tool should return hello \n world \n C++ is the best tool P/S: this is a reduced problem from a bigger one. The way I parse file lead to this problem. 回答1: You can use std::getline, and push_back the "\n" yourself, as mentioned by jaggedSpire: std::ifstream input("doc.txt"); std::vector<std:

STL——容器概述

老子叫甜甜 提交于 2020-04-07 02:23:26
在实际的开发过程中,数据结构本身的重要性完全不逊于算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。 试想:如同栈一样的一条死胡同里停车,这样的效率会很高吗? 经典的数据结构数量有限,但是在项目实战中,我们常常重复着一些为了存放不同数据结构类型而实现顺序表、链表等结构而重复编写的代码,这些代码都十分相似,只是为了适应不同数据类型的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现,构造自己的特定类型下的数据结构,通过设置一些模板,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,避免重复编码。 容器部分主要有:<vector> <list> <deque> <set> <map> <stack> <queue>组成。 下面是常用的一些容器,可以通过下表总结一下它们和相应头文件的对应关系。 来源: https://www.cnblogs.com/CooCoChoco/p/12650935.html

STL(标准模板库)

此生再无相见时 提交于 2020-04-07 00:41:14
STL 主要分为三类: container(容器)  -  用来管理一组数据元素 lterator(迭代器)  -  可遍历STL容器内全部或部分元素的对象 algorithm(算法)  -  对数据进行处理(解决问题)步骤的有限集合。 容器和算法通过迭代器可以进行无缝连接,在STL中几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成库来说提供了更好的代码重用机会。 STL最早源于惠普收益延时,早于C++存在,但是C++引入STL概念后,STL就成为C++的一部分,因为它被内建在你的编译器之内,不需要另行安装。 STL被组织为下面的13个头文件: <algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>、<utility> 下面代码简单说明STL中的一些功能: 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 5 using namespace std; 6 7 int main() 8 { 9 //第一部分:容器 vector 10 vector<int>num; 11 12 num.push_back(1); /

[ C++ STL ] STL中的unordered_map

和自甴很熟 提交于 2020-04-06 12:12:21
咳咳 在学校就不好好学C++ 现在惨了吧 啥也不会 好 那么来补充一下关于unordered_map的一些简单操作吧 定义 它叫做:无序映射。 C++ STL中的unordered_map实现使用了哈希表,在O(1)的时间实现对元素的查找,但是相应地在空间的开销增大了。 一些资料上比较了它和map的特点,我这C++还抓瞎的崽,暂时不进行拓展了,红黑树的特点我还没看呢... STL中的map对应的数据结构是红黑树,红黑树内的数据时有序的,在红黑树上查找的时间复杂度是O(logN),相对于unordered_map的查询速度有所下降,但额外空间开销减小。 常用函数 声明 #include <unordered_map> using namespace std; // <.., ..> 中指明两个变量类型,key-value unordered_map<string, int> map; 容器大小 cout << map.empty() << endl; cout << map.size() << endl; 插入键值对 map['A'] = 1; // or map.insert(make_pair('A', 1)); 判断key值是否存在 假设我们要检验 'B' 是否在我们刚刚声明的map中,可以用unordered_map的成员函数:find()函数和end()函数。

STL容器的适用情况

荒凉一梦 提交于 2020-04-03 22:05:39
转自 http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ /*--> */ /*--> */ 一.各种容器的特性 vector 典型的序列容器, C++ 标准严格要求次容器的实现内存必须是连续的,唯一可以和标准 C 兼容的 stl 容器,任意元素的读取、修改具有常数时间复杂度,在序列尾部进行插入、删除是常数时间复杂度,但在序列的头部插入、删除的时间复杂度是 O(n) ,可以 在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。 deque 序列容器,内存也是连续的,和 vector 相似,区别在于在序列的头部插入和删除操作也是常数时间复杂度 , 可以 在任何位置插入新元素,有随机访问功能。 list 序列容器,内存是不连续的,任意元素的访问、修改时间复杂度是 O(n) ,插入、删除操作是常数时间复杂度 , 可以 在任何位置插入新元素。 set 关联容器,元素不允许有重复,数据被组织成一棵红黑树,查找的速度非常快,时间复杂度是 O(logN) multiset 关联容器,和 set 一样,却别是允许有重复的元素,具备时间复杂度 O(logN) 查找功能。 map 关联容器,按照 { 键,值 } 方式组成集合,按照键组织成一棵红黑树,查找的时间复杂度 O(logN) ,其中键不允许重复。

C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用

余生长醉 提交于 2020-04-02 08:24:38
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇。 主要针对线性表中的 链表 STL std::list进行分析和总结 。 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表、二叉树、图等。在使用这些数据结构时感到有些吃力,主要是对一些主要的数据结构理解的不够,所以趁着暑假假期,近期一段时间总会抽出时间复习一下数据结构, 參考的教材是王立柱编著的《C/C++与数据结构》 ,在详细的应用中採用的是C++标准模板库STL中相应实现的数据结构,主要 參考的是MSDN文档 。 跟着教材的一步一步推进。如今已经复习完了链表一章节。详细的理论能够參看我的博文: http://blog.csdn.net/lg1259156776/article/details/47018813 本次关注点在list模板类的使用。 正文 回想动态数组类 上一篇总结STL vector动态数组类的时候忘记了对还有一种跟vector很类似的动态数组类deque进行说明。 以下对此进行一下补充。 STL deque类须要包括<deque>和使用std。支持在数组的开头和末尾插入或删除元素,而vector仅仅能在末尾插入或删除

STL中vector的初始化

我与影子孤独终老i 提交于 2020-04-02 07:36:36
vector可用于代替C++中的数组,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,STL中向量是使用数组实现的,因此向量具有顺序表的特点,可以快速随机存取数据。向量是一种数据类型的对象的集合,每个对象根据其位置有一个整数索引值与其对应,类似于数组。 使用向量之前,必须包含相应的头文件: #include<vector> using std::vector 同时也应当注意,vector是一个模板类,而非数据类型。所以在定义对象时必须说明vector保存的对象类型。以下给出一些初始化的例子: 1 vector<int> v; //定义向量对象 2 vector<int> v(v1); //定义向量对象v,并且用v1初始化 3 vector<int> v2(n,i); //定义向量对象v2,包含了n个值为i的元素 4 vector<int> v3(n); //定义向量对象v3,其中包含了n个元素值为0的元素 接着介绍一种使用数组初始化向量元素的方式,这种方式在刷题时非常常见,有必要掌握: 1 #include "stdafx.h" 2 #include <stdio.h> 3 #include <string.h> 4 #include <iostream> 5 #include <vector> 6