初涉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. kubernetes入门之获取私有仓库镜像

    一般情况下,我们项目构建的镜像统一会推送至私有仓库,那么这里大家可以参考阿里云的私有仓库搭建教程.那么我们可以通过以下步骤拉取: 1.推送及拉取镜像 1.1. 登录阿里云Docker Registry ...

  2. 通过jenkins API去build一个job

    背景 查看jenkins的api 直接访问 JENKINS_URL/job/JOB_NAME/api/ 就可以查看jenkins的api build一个job的话,是POST请求 JENKINS_UR ...

  3. utf-8的中文,一个字符占几个字节

    https://blog.csdn.net/kindsuper_liu/article/details/80202150 英文字母和中文汉字在不同字符集编码下的字节数英文字母:·字节数 : 1;编码: ...

  4. vuex状态管理之学习笔记

    概述及使用场景 Vuex 是一个主要应用在中大型单页应用的类似于 Flux 的数据管理架构.它主要帮我们更好地组织代码,以及把应用内的的状态保持在可维护.可理解的状态. 但如果是简单的应用 ,就没有必 ...

  5. SpringMVC4+MyBatis+SQL Server2014实现读写分离

    前言 基于mybatis的AbstractRoutingDataSource和Interceptor用拦截器的方式实现读写分离,根据MappedStatement的boundsql,查询sql的sel ...

  6. using的几种用法

    1.using指令.using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间 例如:using System; 一般都会出现在*.cs中.   2.using ...

  7. Nullable<System.DateTime>日期格式转换 (转载)

    一.问题 1.html页面中时间显示出错,数据库中时间是正确的. 原因:没有把DateTime转成String类型. 2.  在C#中,发现不能直接使用ToString("yyyy-MM-d ...

  8. C++桥接模式【转】

    https://www.cnblogs.com/jiese/p/3164940.html 将抽象部份与它的实现部份分离,使它们都可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一,关键就是这个 ...

  9. HDU5887(SummerTrainingDay01-D)

    Herbs Gathering Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  10. CSS 中的 BFC,IFC,GFC和FFC

    原文网址:http://www.cnblogs.com/dingyufenglian/p/4845477.html What‘s FC? 一定不是KFC,FC的全称是:Formatting Conte ...