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 ...
随机推荐
- 01、Spring环境搭建
环境:SpringSource-Tool-3.9.9.Eclipse4.10.0 首先,我们需要解决的是Spring包的问题,我看了百度.CSDN很多都是直接一上来随便丢个包就可以安装了,搞得我弄了一 ...
- scrapy学习之爬虫练习平台22
前言 上一篇文章中爬取了爬虫练习平台的所有 ssr 网站,都是比较简单的,没有反爬措施,这次来爬一下后面的 spa 系列. 环境准备 这里沿用了上篇文章的环境和设置,就不重新搭建环境了. 开始爬取 s ...
- 使用思维导图MindManager能否增强记忆?
学生时代,每当面对冗杂的需要背诵的课业时,有很多人都会发出"这么多内容怎么背啊"."我讨厌死记硬背"."昨天背完今天就忘了"的呐喊.那么,如 ...
- Contest 1445
A \(a\) 中第 \(i\) 小的配 \(b\) 中第 \(i\) 大的. 限制相同,这样配最平均. 时间复杂度 \(O\left(tn\log n\right)\). B 最终的一百名至少是第一 ...
- C语言讲义——内联函数
如果一些函数被频繁调用,不断地有函数入栈(Stack),会造成栈空间的大量消耗. 对应这种问题,可以使用内联函数(inline). 编译器会将内联函数的代码整段插入到调用的位置. #include & ...
- C语言讲义——结构化编程(分支、循环)
顺序结构(从上到下) 分支结构(也叫选择结构) 循环结构 分支结构 if...else 最基本的分支结构是if(){}else{}. 为了代码的安全,同时也是出于代码规范的考虑,if()后面一定要加花 ...
- JQuery案例:暖心小广告
暖心小广告 写一个页面,每隔3秒显示小广告,再过3秒自动关闭. <head> <meta charset="UTF-8"> <title>暖心广 ...
- 推荐:国产etl调度工具Taskctl web应用版,0元永久授权
写在前面 2020年疫情席卷全球,更是对整个市场经济造成了严重影响,年初疫情肆虐,西方世界单方面的科技.经济封锁,国际关系吃紧.....导致很多中小型企业业务链受阻,大型企业经费资金吃紧,轮班制导致公 ...
- C#中From窗体判断提示框是否
int ret(变量名1) = command.ExecuteNonQuery(); if (ret(变量名1) > 0)//判断变量名是否大于0 { DialogResult dr(变量名2) ...
- BootstrapBlazor 组件库使用体验---Table篇
原文地址:https://www.cnblogs.com/ysmc/p/13323242.html Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 Ja ...