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 ...
随机推荐
- nginx开启目录浏览
使用nginx作为下载站点,开启目录浏览的功能 在/etc/nginx/sites-enabled/default中添加: autoindex on ; autoindex_exact_size of ...
- Linux(Centos6.8)配置Nginx环境
1.环境配置 操作系统:centos6.8 [root@host79 ~]# uname -a Linux host79.pluto 2.6.32-642.el6.x86_64 #1 SMP Tue ...
- python-网络安全编程第六天(threading多线程模块&Queue模块&subprocess模块)
前言 昨天晚上9点多就睡了 2点起来没睡意... 那就学习吧emmmm ,拿起闲置几天的python课程学习.学习到现在5.58了 总结下 继续开始学习新的内容 多多线程? 线程(英语:thread) ...
- Camtasia Studio,一款好用到爆炸的视频录制软件
目前网络中有很多视频录制软件,各有特色,经过亲测今天小编为大家推荐一款比较好的视频录制软件就是Camtasia Studio软件,Camtasia支持视频的高清录制以及视频的导入导出,而且最支持导出的 ...
- jQuery 小demo 热点排名
效果如下: 代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta cha ...
- 慢SQL优化:where id in (select max(id)...) 改为join后性能提升400倍
背景 有两张表,都是主键递增,类似于主表和明细表: statistics_apply:统计申请表,主键applyId,7万多条记录 statistics_apply_progress:统计申请进度表( ...
- 在Jenkins的帮助下让我们的应用CI与CD
上图三位大家应该很熟悉吧,借助这三者可以让我们的服务在Linux环境下持续集成.容器中持续部署. 本篇博客的项目是core webapi, .NET 5.0 在11号已经正式发布了,你们的项目都升级了 ...
- C语言讲义——数组
数组是: 一组数据 一组类型相同的数据 在计算机底层,数组是一块连续的内存 为什么使用数组? 一年12个月 int m1=1, m2=2, m3=3, ... 麻烦 数组示例: #include &l ...
- sqli-labs-master less06
第六关与第五关步骤无区别,请参考 sqli-labs-master less05 及 Burp Suite暴力破解示例 区别:在第二步判断注入类型时发现 加单引号与不加单引号没有区别,加双引号时报错, ...
- fist-第九天冲刺随笔
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...