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

打印:

使用 push_back 是值拷贝,也就是说会调用到拷贝构造函数。

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

打印结果:

为了不影响性能,下面改用指针去执行 push_back,避免调用拷贝构造

  1. 1 #include <iostream>
  2. 2 #include <vector>
  3. 3 #include <algorithm>
  4. 4 #include <string.h>
  5. 5
  6. 6 using namespace std;
  7. 7
  8. 8 class student
  9. 9 {
  10. 10 public:
  11. 11 student(int age, const char* name)
  12. 12 {
  13. 13 this->age = age;
  14. 14 strcpy_s(this->name, 64, name);
  15. 15 }
  16. 16 student(const student &s)
  17. 17 {
  18. 18 this->age = s.age;
  19. 19 strcpy_s(this->name, 64, s.name);
  20. 20 cout << "调用了拷贝构造函数" << endl;
  21. 21 }
  22. 22 public:
  23. 23 int age;
  24. 24 char name[64];
  25. 25 };
  26. 26
  27. 27 void demo()
  28. 28 {
  29. 29 vector<student *> V;
  30. 30
  31. 31 student s1(18, "小美女");
  32. 32 student s2(20, "大美女");
  33. 33
  34. 34 V.push_back(&s1);
  35. 35 V.push_back(&s2);
  36. 36
  37. 37 cout << "V中的内用个数为:" << V.size() << endl;
  38. 38
  39. 39
  40. 40 for (vector<student*>::iterator it = V.begin(); it != V.end(); it++)
  41. 41 {
  42. 42 cout << (**it).name << ":" << (**it).age << endl;
  43. 43 }
  44. 44 }
  45. 45
  46. 46 int main()
  47. 47 {
  48. 48 demo();
  49. 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. USACO 2020 OPEN Favorite Colors【并查集-启发式合并-思考】

    题目链接 题意简述 仰慕喜欢同色奶牛的奶牛喜欢同色 (禁止套娃 ,求一种方案,奶牛喜欢的颜色种数最多,多种方案求字典序最小. 题目解析 这道题我最先想到的居然是二分+并查集,我在想啥 咳咳 首先,考虑 ...

  2. 「NOIP2009」最优贸易 题解

    「NOIP2009」最优贸易 题解 题目TP门 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 ...

  3. python-网络安全编程第五天(爬虫模块BeautifulSoup)

    前言 昨晚学的有点晚 睡得很晚了,今天早上10点多起来吃完饭看了会电视剧就瞌睡了一直睡到12.50多起来洗漱给我弟去开家长会 开到快4点多才回家.耽搁了不少学习时间,现在就把今天所学的内容总结下吧. ...

  4. exec() has been disabled for security reasons

    1.修改php.ini里面:disable_functions 2.重启服务器 2.如果是虚拟机,就重启虚拟机

  5. 被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?

    一:背景 1. 讲故事 前几天公号里有一位朋友留言说,你windbg玩的溜,能帮我分析下被 ThreadStatic 修饰的变量到底存放在哪里吗?能不能帮我挖出来,其实这个问题问的挺深的,玩高级语言的 ...

  6. c# 调用Go 动态库

    [StructLayout(LayoutKind.Sequential)] public struct GoMem { public IntPtr data; public UInt64 len; p ...

  7. div可以滚动但不显示滚动条

    首先有3个div, 第1个,固定大小是200*200(单位为px,下同) 第2个,不固定大小,其大小要用第3个div把个撑开,但是这个div必需要有滚动条, 第3个,固定大小与第1个div保持一致20 ...

  8. 用MathType怎么把分数打出来

    分数是生活中最常见的数,作为大学生学习高数概率论更是离不开分数.分数是指整体的一部分,或更一般地,任何数量相等的部分.分数是一个整数a和一个正整数b的不等于整数的比. 当在日常用语中说话时,分数描述了 ...

  9. DC靶机1-9合集

    DC1 文章前提概述 本文介绍DC-1靶机的渗透测试流程 涉及知识点(比较基础): nmap扫描网段端口服务 msf的漏洞搜索 drupal7的命令执行利用 netcat反向shell mysql的基 ...

  10. jQuery 根据value设置radio默认选中

    jQuery 根据value设置radio默认选中:HTML: <input type="radio" name="type" value="1 ...