STL标准模板库之vector
STL提供了一组表示容器、迭代器、函数对象和算法的模板。
- 容器是一个与数组类似的单元,可以存储若干个值。STL容器是同质的,即存储的值的类型相同;
- 算法是完成特定任务(如对数组进行排序或在链表中查找特定值)的处方;
- 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针;
- 函数对象是类似于函数的对象,可以是类对象或函数指针(包括函数名,因为函数名被用作指针)。
STL使得能够构造各种容器(包括数组、队列和链表)和执行各种操作(包括搜索、排序和随机排列)
接下来介绍几种ACMer必须掌握的几个成员
vector容器
1)什么是vector
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组(动态数组),它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。
2)如何定义
//头文件必须包含:
#include<vector>
//定义一个vector,int为数组元素的数据类型,test1为动态数组名
vector<int>test1;
//定义一个元素为结构体型的vector
vector<information>test2
//定义一个迭代器
vector<int>::iterator it;
vector的初始化可以有很多种方式:
//定义10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
① vector<int> a(10);
//定义了10个整型元素的向量,且给出每个元素的初值为1
② vector<int> a(10,1);
//用b向量来创建a向量,整体复制性赋值
③ vector<int> a(b);
//定义了a值为b中第0个到第2个(共3个)元素
④ vector<int> a(b.begin(),b.begin+3);
//从数组中获得初值
⑤ int b[7]={1,2,3,4,5,9,8};
vector<int> a(b,b+7);
3)常用的Vector函数
1、容量函数
容器大小:a.size();//返回a中元素个数
容器容量:a.capacity();//预分配的内存空间与size不同,返回a在内存中总共可以容纳的元素个数
容器判空:a.empty();//空则返回true,否则返回false
更改容器大小:a.resize(num);a.resize(num,value);
a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机
a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,其值为2
2、增加函数
将区间[first,end)中的数据赋值给a (注意区间的开闭):a.assign(first,end)
a只含n个元素,且每个元素为elem:a.assign(n,elem)
a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a
a.assign(4,2);//a只含4个元素,且每个元素为2
- 末尾添加元素:a.push_back(value) //在a的最后一个向量后插入一个元素,其值为value
- 任意位置插入一个元素:a.insert(location,value)//在a的第location的位置插入value
- 任意位置插入num个相同的元素:a.insert(location,num,value)//在a的第location的位置插入num个值为value的数
- 插入另一个向量的[first,end)间的数据:a.insert(location,first,end)
//假设 a:5 7 3 1 4;b: 2 3 4 5 6 7 8
a.push_back(2);//a:5 7 3 1 4 2
a.insert(a.begin()+1,2);//a:5 2 7 3 1 4
a.insert(a.begin()+1,2,3);//a:5 3 3 7 3 1 4
a.insert(a.begin()+1,b.begin()+2,b.begin()+5);//a:5 4 5 6 7 3 1 4
3、删除函数
- 头部删除元素:a.pop_front();
- 末尾删除元素: a.pop_back();
- 删除[first,end)之间的元素: a.erase(first, end);
- 清空所有元素: a.clear();
a.erase(a.begin()+1,a.begin()+3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
4、迭代器
- 开始指针:a.begin();
- 末尾指针:a.end();//指向最后一个元素的下一个位置
5、访问函数
- 返回a的第一个元素:a.front();
- 返回a的最后一个元素:a.back();
- 下标访问:a[1];//并不会检查是否越界
- at方法访问:a.at(1);//会检查越界,若越界则抛出out of range异常
6、其他函数及操作
- 交换函数:a.swap(b);//b也为向量,将a中的元素和b中的元素进行整体交换
- 比较操作:a==b;//b也为向量,向量的比较还有!=,>=,<=,>,<
7、算法
需要包含头文件:
#include<algorithm>
(1)sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
(2)reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
(3)copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
(4)find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
STL标准模板库之vector的更多相关文章
- C++ STL标准模板库(vector)
//vector的使用 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> using na ...
- 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,用来在一个对象群集的元素上进行遍历操作.这个对象群集或许是一个容器,或许是容器的一部分.迭代器的主要好处是,为所有的容器提供 ...
- C++之路起航——标准模板库(vector)
vector(动态数组或向量):动态分配内存空间的线性储存结构. 需要包括头文件<vector> 定义: vector<数据类型> 变量名: Eg: vector<int ...
- STL标准模板库 向量容器(vector)
向量容器使用动态数组存储.管理对象.因为数组是一个随机访问数据结构,所以可以随机访问向量中的元素.在数组中间或是开始处插入一个元素是费时的,特别是在数组非常大的时候更是如此.然而在数组末端插入元素却很 ...
随机推荐
- serviceWorker
推荐阅读:Service Worker 简介 在 Service Worker 之前,我们一般用 AppCache 来实现离线体验(就是配置 Manifest 文件的方式),这个会有很多问题(博主曾尝 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
- Spring Cloud Gateway(四):路由定义定位器 RouteDefinitionLocator
本文基于 spring cloud gateway 2.0.1 1.简介 RouteDefinitionLocator 是路由定义定位器的顶级接口,它的主要作用就是读取路由的配置信息(org.spri ...
- idea创建Web项目(基于Maven多模块)
简述:通常我们开发的项目结构是由多个modules项目组合而成,并且由有个parent的maven项目整体管理.废话少说,直接进入创建过程. 创建parent项目 1.打开idea工具,按照下图操作, ...
- xposed代码示例
package com.example.xposedhook; import android.util.Log; import de.robv.android.xposed.IXposedHookLo ...
- jquery判断一个标签是否包含另外一个标签
jquery判断一个标签是否包含另外一个标签 一.总结 一句话总结: jquery的find方法配合length属性:if($("#video_md_9_1").find(&quo ...
- 关于linux下的系统存储管理
https://blog.csdn.net/aaaaaab_/article/details/80159871 //查看当前系统磁盘使用空间 df -h //查看当前目录文件占用空间大小 du -sh ...
- socket服务端开发之测试使用threading和gevent框架
socket服务端开发之测试使用threading和gevent框架 话题是测试下多线程和gevent在socket服务端的小包表现能力,测试的方法不太严谨,也没有用event loop + pool ...
- 【PHP】解决数据库查询出来的中文内容显示为问号“??”
方法一:在数据库连接后执行: mysql_query('SET NAMES utf8'); 代码: $dbconn=mysql_connect("localhost", " ...
- Linux -- 如何减少IO过程中的CPU copy
四种I/O方式的对比 1. Buffered I/O read(file, tmp_buf, len); write(socket, tmp_buf, len); 上下文切换:4次 CPU copy: ...