STL六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

其中,容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据;容器又分为序列式容器和关联式容器。

算法:各种常用的算法,如sort、find、copy、for_each等;算法又分为质变算法和非质变算法。

迭代器:扮演了容器与算法之间的胶合剂;迭代器分为输入迭代器、输出迭代器、前向迭代器、双向迭代器以及随机访问迭代器等。

仿函数:行为类似函数,可作为算法的某种策略。

适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。

空间配置器:负责空间的配置与管理。

我们在使用STL中string容器进行查找时需要注意到find()和rfind()的使用特点,find()是从左往右进行查找,而rfind()是从右往左查找。

string str111 = "abcdefbc";
int pos1 = str111.find("bc");
cout<<"pos1= "<<pos1<<endl; pos1 = str111.rfind("bc");
cout<<"pos1= "<<pos1<<endl;

结果:

关于vector容器中的知识点:

需要注意的是vector容器的容量和大小不是一个概念,同时当我们使用resize()重新指定容器大小时,,若是指定为更小的大小时,容量不会立即发生变化,指定为更大的大小时,容量会立即发生变化。

vector<int> v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
vector<int> v31;
v31 = v1;
if (v31.empty())
{
cout<<"v31为空!!"<<endl;
}else
{
cout<<"v31不为空!!"<<endl;
cout<<"v31的容量为:"<<v31.capacity()<<endl;
cout<<"v31的大小为:"<<v31.size()<<endl;
} v31.resize(15,10);
printVector(v31);
cout<<"v31的容量为:"<<v31.capacity()<<endl;
cout<<"v31的大小为:"<<v31.size()<<endl; v31.resize(5);
printVector(v31);
cout<<"v31的容量为:"<<v31.capacity()<<endl;
cout<<"v31的大小为:"<<v31.size()<<endl;
void printVector(vector<int> &v)
{
for (vector<int>::iterator it = v.begin(); it!= v.end(); it++)
{
cout<<*it<<" ";
}
cout<<endl; }

结果:

reserve(int len)函数可以根据指定特定空间大小,防止后面需要多次分配空间,如果数据量较大,可以一开始利用reserve预留空间

vector<int> v ;
//v.reserve(1000);
int num =0;
int * p =NULL;
for (int i = 0; i < 1000; i++)
{
v.push_back(i);
if (p!=&v[0])
{
p=&v[0];
num++;
}
}
cout<<"num= "<<num<<endl;

加入v.reserve(1000)后

STL学习注意点的更多相关文章

  1. 标准模板库(STL)学习探究之stack

    标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string

  2. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  3. ###STL学习--vector

    点击查看Evernote原文. #@author: gr #@date: 2014-08-11 #@email: forgerui@gmail.com vector的相关问题.<stl学习> ...

  4. ###STL学习--关联容器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...

  5. ###STL学习--迭代器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的迭代器. ###stl学习 |--迭代 ...

  6. ###STL学习--函数对象

    点击查看Evernote原文. #@author: gr #@date: 2014-08-13 #@email: forgerui@gmail.com 在stl中,函数对象被大量地使用,用以提高代码的 ...

  7. ###STL学习--适配器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-24 #@email: forgerui@gmail.com STL中的适配器. ###stl学习 |--迭代 ...

  8. STL学习:STL库vector、string、set、map用法

    本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...

  9. Effective STL 学习笔记 39 ~ 41

    Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  10. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

随机推荐

  1. 进程的退出--exit()与_exit()的区别

    进程终止:①异常终止:②正常终止 异常终止:①进程收到某种信号: ②调用abort()函数:[堕胎] 正常终止:①main()函数返回 ②调用exit()函数 三.调用_exit()函数或_Exit( ...

  2. PLSQL中&符号处理

    在SQL语句中的字符串中出现了&符号,当执行的时候会被认为是参数需要传递,如update product set brand = 'D&G'; 解决办法是把语句改为:update pr ...

  3. 实现远程磁盘:像访问自己的电脑硬盘一样访问对方的电脑硬盘 (附Demo源码)

    在现实场景中,远程桌面的功能大家已经用得很多了,而在某些场景下,我们需要使用类似的远程磁盘功能,这样能非常方便地操作对方电脑磁盘的目录.以及传送文件.那么,这样的远程磁盘功能要怎么实现了? 这次我们将 ...

  4. TVM Pass优化 -- 移除无用函数(Remove Unused Function)

    定义 移除无用函数,Remove Unused Function,顾名思义,就是删除Module中定义但未用到的函数 当然,它也是一个模块级的优化, 举例子: def get_mod(): mod = ...

  5. 网络编程:C10K问题

    C10K问题 C10K问题就是如何一台物理机上同时服务10000个用户?C代表并发,10K就是10000 C10K 问题是由一个叫 Dan Kegel 的工程师提出并总结归纳的,你可以通过访问http ...

  6. 为什么使用MQ

    在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 开发中消息队列通常有如下应用场景: 1.任务异步处理 ...

  7. 第1讲、#PyTorch教学环境搭建与Tensor基础操作详解

    引言 PyTorch是当前深度学习领域最流行的框架之一,因其动态计算图和直观的API而备受开发者青睐.本文将从零开始介绍PyTorch的环境搭建与基础操作,适合各种平台的用户和深度学习初学者. 1. ...

  8. 【拥抱鸿蒙】Flutter+Cursor轻松打造HarmonyOS应用(二)

    这是[Flutter+Cursor轻松打造HarmonyOS应用]系列的第二篇.前一篇已经介绍了如何搭建Flutter鸿蒙应用开发环境,就让我们一起来看看如何借助Cursor让鸿蒙App开发更快更简单 ...

  9. 如何在 .NET 中构建一个好用的动态查询生成器

    前言 自从.NET Framework 3.5提供了LINQ之后,集合数据查询基本被LINQ统一了.这大幅提高了编写数据查询代码的效率和质量,但是在需要编写动态查询的时候反而很困难,特别是最常用的wh ...

  10. Spring Ai 从Demo到搭建套壳项目(一)初识与实现与deepseek对话模式

    前言 为什么说Java长青,主要是因为其生态圈完善,Spring又做了一款脚手架,把对接各个LLM厂商的sdk做了一遍,形成一系列的spring-ai-starter-** 的依赖. 目前为止版本去到 ...