初涉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简单用法的更多相关文章

  1. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  2. STL————vector的用法

    一.什么是vector? 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象.可以简单的认为,向量是一个能 ...

  3. C++标准模板库(STL)——vector常见用法详解

    vector的定义 vector<typename> name; 相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是& ...

  4. C++STL vector简单使用练习1

    #include <iostream> #include <vector> #include <numeric> using namespace std; int ...

  5. STL set简单用法

    set的常见用法详解 set翻译为集合,是一个内部自动有序并且不含重复元素的容器. 可以用于去掉重复元素,或者元素过大,或者不能散列的情况,set只保留元素本身而不考虑它的个数. 头文件:#inclu ...

  6. [STL] vector基本用法

    vector的数据安排以及操作方式,与array非常相似.两者的唯一区别在于空间的运用的灵活性.array是静态空间,一旦配置了就不能改变.vector是动态空间,随着元素的加入,它的内部机制会自行扩 ...

  7. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  8. STL中的Vector相关用法

    STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...

  9. STL vector 用法介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

随机推荐

  1. 对话Task

    上一篇简单讲解了 线程和线程池以及上下文切换.创建线程代价高昂,默认每个线程都要占用大量虚拟内存1M.更有效的做法使用线程池,重复利用线程.在.NET4.0中引入了TPL任务并行库,你可以在将精力集中 ...

  2. spring cloud+.net core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  3. Neo4j使用Cypher查询图形数据

    Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,由于Neo4j在图形数据库家族中处于绝对领先的地位,拥有众多的用户基数,使得Cypher成为图形查询语言 ...

  4. spring security 实践 + 源码分析

    前言 本文将从示例.原理.应用3个方面介绍 spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 Spring Security 是 ...

  5. koa执行过程原理分析

    本文原创,转载请注明出处https://i.cnblogs.com/EditPosts.aspx?postid=5710639 我们大家都知道,当koa接到请求经过中间件时,当执行到 yield ne ...

  6. 出现 The processing instruction target matching "[xX][mM][lL]" is not allowed错误

    错误原因与解决办法: 这个错误的原因是因为xml的开始有多余的空格造成的,只要把多余的空格删除就没有问题了. xml开始部分写注释也会出现此问题. 本文出自:艺意

  7. pythonic(fork)

    转载  https://wuzhiwei.net/be_pythonic/

  8. centos6.10搭建ELK之elasticsearch6.5.4

    1.环境准备 1.1.安装java环境版本不要低于java8 # java -version java version "1.8.0_191" Java(TM) SE Runtim ...

  9. 2017年最新20个轻量的 JavaScript 库和插件

    下面这个列表中的免费 JavaScript 插件都是今年发布的,没有臃肿的一体化的框架,它们提供轻量级的解决方案,帮助 Web 开发过程更容易和更快.提供的插件可以创建滑块.响应式菜单.模态窗口.相册 ...

  10. solr源码分析之数据导入DataImporter追溯。

    若要搜索的信息都是被存储在数据库里面的,但是solr不能直接搜数据库,所以只有借助Solr组件将要搜索的信息在搜索服务器上进行索引,然后在客户端供客户使用. 1. SolrDispatchFilter ...