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 ...
随机推荐
- 【经验】Git|Linux终端git太慢,改hosts、复制文件夹、用镜像源?不不不不不
有个同学问我Linux下想要克隆一个仓库怎么办,并给我发了一个word,记录了他的操作.看完之后我的血压都上来了,遂记之. 下文分成两种情况,克隆一两个仓库,和克隆一大堆仓库. 文章目录 一. ...
- vue3 基础-插件 plugin
前几篇我们介绍了 mixin 混入的的方式能实现对代码的复用, 而本篇将要介绍的 plugin 将会更加适合这种通用性功能的代码的复用和扩展. 最常用的场景, 比如轮播图就非常实用 plugin 来实 ...
- TVMC python:一种TVM的高级API
Step 0: Imports from tvm.driver import tvmc Step 1: Load a model 下载模型: wget https://github.com/onnx/ ...
- 解决Andaconda创建虚拟环境出现的“无法定位程序输入点”的问题
解决Andaconda创建虚拟环境出现的"无法定位程序输入点"的问题 需要查看两个相同名称的文件:libssl-1_1x64.dll 第一个文件的路径:anaconda\DLLs\ ...
- Django startproject, startapp后的配置 总结
(1)在project的settings.py中的INSTALL_APPS中添加新建的各个app的名字. (2)设置templates文件夹的位置(容纳html文件):TEMPLATE_DIR=os. ...
- 聊一聊 dotnet 社区对 RISC-V 的支持进展
我们从Github .NET 社区的相关仓库和Issue 里通过三个方面的简要梳理dotnet 对 RISC-V 的支持: 官方支持截至 2025 年 5月,微软官方的 .NET(dotnet)尚未正 ...
- codeup之查找
Description 输入数组长度 n 输入数组 a[1-n] 输入查找个数m 输入查找数字b[1-m] 输出 YES or NO 查找有则YES 否则NO . Input 输入有多组数据. 每组输 ...
- CentOS7.* 查询开机启动项
使用 systemctl list-unit-files 可以查看启动项 左边是服务名称,右边是状态,enabled是开机启动,disabled是开机不启动 过滤查询可以systemctl list- ...
- CF contest 1935 Round 932 (Div. 2) A-D题解
Codeforces Round 932 (Div. 2) A-D题解 Codeforces Round 932 (Div. 2) 绪言 很菜,AB速度慢,卡在C,想DP,但是时间优化不下来,说服自己 ...
- 启智树提高组day4T1 T1(t1.cpp,1s,512MB)
启智树提高组day4T1 T1(t1.cpp,1s,512MB) 题面描述 对⼀个⻓度为2n 的实数序列A考虑下列问题: 设S为序列中所有元素的和.你可以做下列操作n次: 选择两个未被选中过的下标i和 ...