STL vector简单用法
初涉c++,此为《算法笔记》中的内容,有待个人理解完善。
vector
vector翻译为向量,叫做“变长数组”更容易理解。
头文件:#include<vector>
vector定义
vector<typename> name;
相当于name[SIZE],只不过其长度可以根据需要变化,比较节省时间。
注意:如果typename也是一个stl容器,定义时要在>>之间加上空格。
vector<int> name;
vector<vector<int> > name;//>>之间要加空格
定义vector数组的方法:
vector<typename> Arrayname[arraySize];
vector<int> vi[100];//Arrayname[0]~Arrayname[99]中每一个都是一个vector容器。
//与上一种定义的区别是,这种定义,确定了一维的大小
vector容器内元素的访问
vector一般提供两种访问:通过下标访问或通过迭代器访问。
(1)通过下标访问(和访问数组一样)
(2)通过迭代器访问
迭代器(iterator)可以理解为一种类似指针的东西,其定义为:
vector<typename>::iterator it;//这样it就是vector<typename>::iterator型的变量
vector<int>::iterator it;
vector<double>::iterator it1;
//这样就得到了迭代器it,并且可以通过*it来访问vector里的元素
vector<int> arr;
for(int=0;i<5;i++){
arr.push_back(i);//push_back(i)在arr的末尾添加新元素i,即一次添加0 1 2 3 4 5
}
可以通过类似下标和指针访问数组的 方式来访问容器内的元素:
#include<stdio.h>
#include<vector>
using namespace std;
int main(){
vector<int> arr;
vector<int> arr;
for(int=0;i<5;i++){//添加元素
arr.push_back(i);
}
//arr.begin()为取出arr的首元素地址,儿it指向这个地址
vector<int>::iterator it=vi.begin();
for(int i=0;i<5;i++){
printf("%d",*(it+i));
}//打印元素
return 0;
}
//从这里看,arr[i]和*(vi.begin()+i)是等价的
arr.end()不是最后一个元素的地址,而是指向最后一个元素的下一个元素,
只作为迭代器末尾标志,不储存任何元素。
美国人思维比较习惯左闭右开。
迭代器可以进行自增自减操作。
在常用的STL容器中,只有在vector和string中,才允许使用vi.begin()+i这种写法。
vector常用函数实例解析
(1)push_back():
在vector后面添加一个元素x,时间复杂度为O(1)
(2)pop_back()
用以删除vector的尾元素,时间复杂度O(1)
3) size()
用来后获得vector中元素的个数,时间时间复杂度为O(1)。
size()返回的是unsigned类型,不过用%d不会有问题。
(4)clear()
用来清空vector中的所有元素,时间复杂度为O(N)。
insert()
insert(it,x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度O(N)。
erase()
1删除单个元素
erase(it)即删除迭代器为it处的元素。
2删除一个区间内的所有元素
erase(first,last)即删除[first,last]内的所有元素。
#vector的常见用途
存储数据
vector本身可以作为数组使用,而且在一些元素个数不确定的场合可以很好地节省空间。
有些场合要求把某些数据输出在一行,数据中间用空格分开,囿于输出数据的个数是确定的,可以先用vector记录所有数据,然后一次性输出。
用邻接表储存图
使用vector实现邻接表可以让那个一些对指针不熟悉的读者有比较方便的写法。
---恢复内容结束---
STL vector简单用法的更多相关文章
- STL vector常见用法详解
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...
- STL————vector的用法
一.什么是vector? 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象.可以简单的认为,向量是一个能 ...
- C++标准模板库(STL)——vector常见用法详解
vector的定义 vector<typename> name; 相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是& ...
- C++STL vector简单使用练习1
#include <iostream> #include <vector> #include <numeric> using namespace std; int ...
- STL set简单用法
set的常见用法详解 set翻译为集合,是一个内部自动有序并且不含重复元素的容器. 可以用于去掉重复元素,或者元素过大,或者不能散列的情况,set只保留元素本身而不考虑它的个数. 头文件:#inclu ...
- [STL] vector基本用法
vector的数据安排以及操作方式,与array非常相似.两者的唯一区别在于空间的运用的灵活性.array是静态空间,一旦配置了就不能改变.vector是动态空间,随着元素的加入,它的内部机制会自行扩 ...
- STL vector用法介绍
STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...
- STL中的Vector相关用法
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...
- STL vector 用法介绍
介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...
随机推荐
- 从零开始学 Web 之 JavaScript(一)JavaScript概述
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...
- Jenkins之使用Pyinstaller构建Python应用程序
目录 1. 极简概述 2. Jenkins配置 2.1 安装JDK 2.2 安装Jenkins 3. 安装Docker 4. 使用PyInstaller构建Python应用程序 4.1 Fork 一个 ...
- Docker 本地导入镜像/保存镜像/载入镜像/删除镜像
1.Docker导入本地镜像 有时候我们自己在本地或者其它小伙伴电脑上拷贝了一份镜像,有了这个镜像之后,我们可以把本地的镜像导入,使用docker import 命令. 例如这里下载了一个 aliba ...
- Mysql的变量一览
Server System Variables(系统变量) MySQL系统变量(system variables)是指MySQL实例的各种系统变量,实际上是一些系统参数,用于初始化或设定数据库对系统资 ...
- 四、windows下TortoiseGit的使用与操作
使用 Git命令有时候确实不怎么方便,特别是每次都要输入密码,如果配置 SSH 的方式,又实在是很麻烦.(当然,必须使用 Windows 神器才有方便友好的客户端图形界面啦!!!) 关于 Tortoi ...
- bootstrap知识笔记
.nav>.active>a{ background-color:#0088cc; color:#fff; } /*! * Bootstrap v3.3.7 (http://getboot ...
- Go 标准库 —— sync.Mutex 互斥锁
Mutex 是一个互斥锁,可以创建为其他结构体的字段:零值为解锁状态.Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁. 方法 func (*Mutex) Lock func (m *Mut ...
- .Net实现微信公众平台开发接口(一) 之 “微信开发配置”
我们只要通过微信官方认证,成为开发者,才能实现微信提供的各种接口,否则即使调用了接口,微信也不会实现推送,功能也无法通过开发模式真正得到实现,所以需要正确配置微信信息,通过微信官方认证,成为开发者才可 ...
- break与continue,return结束循环区别
break是跳出一层循环,continue是结束一趟循环 ,return才是结束所有层循环! 如果有多层for循环,break会跳出当前这一层,去执行最外层循环(而不是退出所有层循环);而contin ...
- 数据结构(java版)学习笔记(四)——线性表之循环链表
单向循环链表 PS:有阴影的结点是头结点 概念: 最后一个结点的链域值不为NULL,而是指向头结点 特点: 从表中的任意结点出发,都可以找到表中其他结点 循环条件 p==h 双向链表 概念 链表中的每 ...