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(标准模板库)的更多相关文章

  1. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

  2. STL标准模板库介绍

    1. STL介绍 标准模板库STL是当今每个从事C++编程的人需要掌握的技术,所有很有必要总结下 本文将介绍STL并探讨它的三个主要概念:容器.迭代器.算法. STL的最大特点就是: 数据结构和算法的 ...

  3. STL学习系列一:STL(标准模板库)理论基础

    STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的从广 ...

  4. STL(标准模板库)理论基础,容器,迭代器,算法

    基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.   ...

  5. STL(标准模板库)基本概念

    一.什么是STL STL(Standard Template Library,标准模板库)的从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),容器 ...

  6. C++ Templates STL标准模板库的基本概念

    STL标准库包括几个重要的组件:容器.迭代器和算法.迭代器iterator,用来在一个对象群集的元素上进行遍历操作.这个对象群集或许是一个容器,或许是容器的一部分.迭代器的主要好处是,为所有的容器提供 ...

  7. STL标准模板库 向量容器(vector)

    向量容器使用动态数组存储.管理对象.因为数组是一个随机访问数据结构,所以可以随机访问向量中的元素.在数组中间或是开始处插入一个元素是费时的,特别是在数组非常大的时候更是如此.然而在数组末端插入元素却很 ...

  8. STL标准模板库之vector

    目录 vector容器 1)什么是vector 2)如何定义 3)常用的Vector函数 1.容量函数 2.增加函数 3.删除函数 4.迭代器 5.访问函数 6.其他函数及操作 7.算法 STL提供了 ...

  9. STL(标准模板库) 中栈(stack)的使用方法

    STL 中栈的使用方法(stack) 基本操作: stack.push(x)  将x加入栈stack中,即入栈操作 stack.pop()  出栈操作(删除栈顶),只是出栈,没有返回值 stack.t ...

  10. STL 标准模板库

    <vector> 可变长的数组 Vector<int>v int是一个模板参数,这样传进来的都会是int V.push_back(a)将a传进v,且放在最后一个 V.clear ...

随机推荐

  1. Javaer 进阶必看的 RocketMQ ,就这篇了

    每个时代,都不会亏待会学习的人. 大家好,我是 yes. 继上一篇 头条终面:写个消息中间件 ,我提到实现消息中间件的一些关键点,今天就和大家一起深入生产级别消息中间件 - RocketMQ 的内核实 ...

  2. Python_字符串处理方法

    1.字符串转换 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sStr1 = 'strcpy2' print sStr2 1.字符串复制 #s ...

  3. 多线程实现socketserver练习

    1.server import socket from threading import Thread def my_socketserver(conn, addr): conn.send(b'hel ...

  4. new Date在不同浏览器识别问题

    原文 http://www.cnblogs.com/yangxiaopei/articles/4708157.html 4. 正确的做法 以下列出正确的做法: var time1 = (timesta ...

  5. 深度分析:面试90%被问到的 Session、Cookie、Token,看完这篇你就掌握了!

    Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie 的主要目的 ...

  6. 实用简易的U盘修复工具推荐

    如果我们的U盘出现可以读取,但不能打开,或是提示格式化的情况,那可能是U盘硬件出现了问题.U盘内部部件损坏就只能维修了,如果是u盘出现逻辑错误,常用的解决方法就是到网上下载一个u盘修复工具,对u盘进行 ...

  7. webgl智慧楼宇发光效果算法系列之高斯模糊

    webgl智慧楼宇发光效果算法系列之高斯模糊 如果使用过PS之类的图像处理软件,相信对于模糊滤镜不会陌生,图像处理软件提供了众多的模糊算法.高斯模糊是其中的一种. 在我们的智慧楼宇的项目中,要求对楼宇 ...

  8. Python的偏函数

    import functools def showag(*args,**kwargs): print(args) print(kwargs) p1 = functools.partial(showag ...

  9. 20200427_ls_正在读取目录_输入/输出错误

    环境: 在Centos7.2上挂载了一个2T的移动硬盘, 使用vim 在移动硬盘中编辑 .sh文件, wq的时候提示出错, 然后清空的文件, 可以正常wq出来 [root@localhost yido ...

  10. Kotlin for Java Developers 学习笔记

    Kotlin for Java Developers 学习笔记 ★ Coursera 课程 Kotlin for Java Developers(由 JetBrains 提供)的学习笔记 " ...