STL学习注意点
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学习注意点的更多相关文章
- 标准模板库(STL)学习探究之stack
标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- ###STL学习--vector
点击查看Evernote原文. #@author: gr #@date: 2014-08-11 #@email: forgerui@gmail.com vector的相关问题.<stl学习> ...
- ###STL学习--关联容器
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...
- ###STL学习--迭代器
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的迭代器. ###stl学习 |--迭代 ...
- ###STL学习--函数对象
点击查看Evernote原文. #@author: gr #@date: 2014-08-13 #@email: forgerui@gmail.com 在stl中,函数对象被大量地使用,用以提高代码的 ...
- ###STL学习--适配器
点击查看Evernote原文. #@author: gr #@date: 2014-08-24 #@email: forgerui@gmail.com STL中的适配器. ###stl学习 |--迭代 ...
- STL学习:STL库vector、string、set、map用法
本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- 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 ...
随机推荐
- Oracle 使用UTL_HTTP发送http请求--转载
参考:https://blog.csdn.net/tmaczt/article/details/82665885 GET方式 CREATE OR REPLACE FUNCTION FN_HTTP_GE ...
- mybatis—— 一个空格引发的血案
环境描述: 我在使用SSM做项目的时候需要一个需求:一个用户有多个角色,一个角色有多个权限,我需要根据用户的id找到用户的所有角色,及其对应的权限. 数据库是这个样子,users_role表记录了用户 ...
- <HarmonyOS第一课12>Web组件和WebView #鸿蒙课程##鸿蒙生态#
课程介绍 <HarmonyOS第一课:Web组件和WebView>是一门专为HarmonyOS开发者设计的课程,旨在掌握如何在应用中集成Web内容.课程首先介绍了基于Web技术的Web组件 ...
- 【记录】gnuplot|gnuplot怎么把多个图画成一个?
版本:gnuplot 5.2 patchlevel 2 解决了无数次了还是反复忘,气,遂记. 下列程序的功能: 读取文件夹下的所有dat文件,并把所有dat的结果画在一张图里并标好图例: set te ...
- 操作系统综合题之“采用短进程优先调度算法(Shortest-Process-First,SPF)和先来先服务调度算法(First-Come,First-Served,FCFS)计算开始运行时间、结束时间、等待时间、周转时间、带权周转时间、平均周转时间”
一.问题:某系统中有四个进程,他们进入系统的时间和需要服务的时间如题下表所示(表中数值均为十进制) 进程 进入系统的时间 需要服务的时间 P1 0 100 P2 10 60 P3 25 25 P4 3 ...
- 自制体积不到 2kb 的代码编辑器,areaEditor.js,增强 textarea 标签的代码编辑体验
目录 起因 缩进功能 缩进类型 自动补全括号 犯难 自动补全 阻止补全 编辑框抖动 在空行按下删除键,清空 封装代码 怎么压缩 JavaScript 代码 更多的功能? 起因 前两天我搞的那个在线 H ...
- 梯度下降(Gradient Descent)法
梯度下降法(Gradient Descent)是求解无约束最优化问题最常用的方法之一,它是一种迭代方法,每一步的主要操作就是求解目标函数的梯度向量,将当前位置的负梯度方向作为搜索方向. 直观的表示可用 ...
- Friend Circles(dfs)——LeetCode进阶路
原题链接https://leetcode.com/problems/friend-circles/ 题目描述 There are N students in a class. Some of them ...
- Java四种引用类型回收时机介绍
每种编程语言都有操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过"引用"(reference).在 Java 中一切都被视作对象,但是我 ...
- Python中的cls变量
技术背景 在Python的类型设计中,有时候会遇到一个cls参数.其实cls参数就是一个约定俗成的名称,用其他的名字也能正常运行但不建议这么用.它的作用类似于实例方法中的self参数,代表的是类本身, ...