STL(标准模板库)
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); //push_back:往 vector 最后放置1个元素 “1”
13 num.push_back(2);
14 num.push_back(3);
15 num.push_back(4);
16 num.push_back(3);
17
18 cout << "num 的元素个数:" << num.size() << endl;
19
20 //第二部分:迭代器 begin() end()
21 cout << "num 中保存的元素:";
22 for (vector<int>::iterator it = num.begin(); it != num.end(); it++) //用迭代器来遍历,使用指针 it, 从 begin()开始,it++ 至 end()
23 {
24 cout << *it << " ";
25 }
26
27 //第三部分:算法 count
28 int numCount = count(num.begin(), num.end(), 3);
29
30 cout << "\nnum 中数值为3的元素个数为:"<< numCount << endl;
31
32 return 0;
33 }
打印:

使用 push_back 是值拷贝,也就是说会调用到拷贝构造函数。
1 #include <iostream>
2 #include <vector>
3 #include <algorithm>
4 #include <string.h>
5
6 using namespace std;
7
8 class student
9 {
10 public:
11 student(int age, const char* name)
12 {
13 this->age = age;
14 strcpy_s(this->name, 64, name);
15 }
16 student(const student &s)
17 {
18 this->age = s.age;
19 strcpy_s(this->name, 64, s.name);
20 cout << "调用了拷贝构造函数" << endl;
21 }
22 private:
23 int age;
24 char name[64];
25 };
26
27 void demo()
28 {
29 vector<student> V;
30
31 student s1(18, "小美女");
32 student s2(20, "大美女");
33
34 V.push_back(s1);
35 V.push_back(s2);
36
37 cout << "V中的内用个数为:" << V.size() << endl;
38
39 }
40
41 int main()
42 {
43 demo();
44 }
打印结果:

为了不影响性能,下面改用指针去执行 push_back,避免调用拷贝构造
1 #include <iostream>
2 #include <vector>
3 #include <algorithm>
4 #include <string.h>
5
6 using namespace std;
7
8 class student
9 {
10 public:
11 student(int age, const char* name)
12 {
13 this->age = age;
14 strcpy_s(this->name, 64, name);
15 }
16 student(const student &s)
17 {
18 this->age = s.age;
19 strcpy_s(this->name, 64, s.name);
20 cout << "调用了拷贝构造函数" << endl;
21 }
22 public:
23 int age;
24 char name[64];
25 };
26
27 void demo()
28 {
29 vector<student *> V;
30
31 student s1(18, "小美女");
32 student s2(20, "大美女");
33
34 V.push_back(&s1);
35 V.push_back(&s2);
36
37 cout << "V中的内用个数为:" << V.size() << endl;
38
39
40 for (vector<student*>::iterator it = V.begin(); it != V.end(); it++)
41 {
42 cout << (**it).name << ":" << (**it).age << endl;
43 }
44 }
45
46 int main()
47 {
48 demo();
49 }
执行结果:

===========================================================================================================================
STL(标准模板库)的更多相关文章
- STL标准模板库(简介)
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...
- STL标准模板库介绍
1. STL介绍 标准模板库STL是当今每个从事C++编程的人需要掌握的技术,所有很有必要总结下 本文将介绍STL并探讨它的三个主要概念:容器.迭代器.算法. STL的最大特点就是: 数据结构和算法的 ...
- STL学习系列一:STL(标准模板库)理论基础
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的从广 ...
- STL(标准模板库)理论基础,容器,迭代器,算法
基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. ...
- STL(标准模板库)基本概念
一.什么是STL STL(Standard Template Library,标准模板库)的从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),容器 ...
- C++ Templates STL标准模板库的基本概念
STL标准库包括几个重要的组件:容器.迭代器和算法.迭代器iterator,用来在一个对象群集的元素上进行遍历操作.这个对象群集或许是一个容器,或许是容器的一部分.迭代器的主要好处是,为所有的容器提供 ...
- STL标准模板库 向量容器(vector)
向量容器使用动态数组存储.管理对象.因为数组是一个随机访问数据结构,所以可以随机访问向量中的元素.在数组中间或是开始处插入一个元素是费时的,特别是在数组非常大的时候更是如此.然而在数组末端插入元素却很 ...
- STL标准模板库之vector
目录 vector容器 1)什么是vector 2)如何定义 3)常用的Vector函数 1.容量函数 2.增加函数 3.删除函数 4.迭代器 5.访问函数 6.其他函数及操作 7.算法 STL提供了 ...
- STL(标准模板库) 中栈(stack)的使用方法
STL 中栈的使用方法(stack) 基本操作: stack.push(x) 将x加入栈stack中,即入栈操作 stack.pop() 出栈操作(删除栈顶),只是出栈,没有返回值 stack.t ...
- STL 标准模板库
<vector> 可变长的数组 Vector<int>v int是一个模板参数,这样传进来的都会是int V.push_back(a)将a传进v,且放在最后一个 V.clear ...
随机推荐
- 整理了 15 道 Spring Boot 高频面试题,看完当面霸!
转载:https://mp.weixin.qq.com/s/fj-DeDfGcIAs8jQbs6bbPA 什么是面霸?就是在面试中,神挡杀神佛挡杀佛,见招拆招,面到面试官自惭形秽自叹不如!松哥希望本文 ...
- 死磕以太坊源码分析之p2p节点发现
死磕以太坊源码分析之p2p节点发现 在阅读节点发现源码之前必须要理解kadmilia算法,可以参考:KAD算法详解. 节点发现概述 节点发现,使本地节点得知其他节点的信息,进而加入到p2p网络中. 以 ...
- 安装Ubuntu16.04系统后分辨率底的问题
问题描述:安装Ubuntu系统后有可能会遇到分辨率很低的问题,别着急,这是一个小问题. 解决方案:修改/etc/default/grub,打开终端用命令:sudo gedit /etc/default ...
- 在Camtasia中对录制视频进行转换编辑
在我们的日常学习生活中,课件是我们经常需要接触的东西,一份精美的课件会让我们的学习生活看起来不那么的枯燥,学习也就不会索然无味.当精美的课件加上老师的谆谆教导,学习便会变成一件非常简单的事情.将课件制 ...
- FL Studio钢琴卷轴之画笔工具
在FL Studio中,钢琴卷轴窗口是制作音乐很重要的一个窗口,大部分音乐编辑的工作都要在该窗口中完成.钢琴卷轴的概念来源于旧时自动机械钢琴所使用的纸质卷轴,在钢琴卷轴中,纵轴代表音符的高度,横轴代表 ...
- leetcode 56合并区间 java
//先排序,将左区间小的放在前面,然后如果前一个的右区间大于下一个的左区间,则可以合并,分别用两个下标指向当前的大区间和将要考察的小区间 class Solution { public int[ ...
- python 工业日志模块 未来的python日志最佳实践
目录 介绍 好的功能 安装方法 参数介绍 呆log 参数与 使用方法 版本说明 后期版本规划 todo 感谢 介绍 呆log:工业中,python日志模块,安装即用.理论上支持 python2, py ...
- H3CNE(教程)
培训机构提供的ppt,可能也是来自于官方提供,涉及到H3CNE认证考试中的全部知识点,学真技术还得看这个.包括帧中继,哪怕是淘汰了十多年了. https://huxiaoyao.lanzous.com ...
- Java lambda 分组后多列求和
主要思路是reducing,可以像sql一样分组后多列求和处理成新对象等: select code,max(name)as name,sum(chengJi)as chengJi,sum(age)as ...
- 14_TTS
TTS(Text to speech)为语音合成的意思.本课程主要介绍了TTS的使用方法. 1 package cn.eoe.tts; 2 3 import java.util.Locale; 4 i ...