vector就是一个不定长数组,vector是动态数组,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素,使用vector之前,必须包含相应的头文件和命名空间。

#include <vector>
using namespace std;

假设type是int, string, node(结构体)等

vector<int>v;//保存整型变量
vector<string>v;//相当于保存string的字符串数组
vector<node>v;//保存结构体的数组
vector<type>v;//保存类型为type的变量

还可以定义二维数组:

vector<int>v[maxn];

在这里在介绍一个概念---迭代器(iterator):

我对迭代器理解是对指针的以一种封装和抽象,就好像把c语言中的指针也写成一种模板以便于程序员的使用;

这里只说迭代器的简单使用:

vector<int>::iterator it;//定义迭代器的指针
for (it = v.begin(); it != v.end(); it++) {//这里使用迭代器的形式来遍历vector
    cout << *it << endl;
}
#include <vector>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int main() {
vector<int>v;
vector<int>::iterator it;//定义迭代器的指针
int a, n, m;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a;
v.push_back(a);//在尾部插入元素
}
sort(v.begin(), v.end());//还可以使用sort进行排序
for (it = v.begin(); it != v.end(); it++) {//这里使用迭代器的形式来遍历vector
cout << *it << endl;
}
for (int i = 0; i < v.size(); i++) {//使用数组的方式进行遍历
cout << v[i] << endl;
}
return 0;
}

总结vector的基本操作:

这里我们以vector<int> c;为例进行说明。

1、容器的大小操作

c.max_size():返回向量类型的最大容量(2^30-1=0x3FFFFFFF)

c.capacity():返回向量当前开辟的空间大小(<= max_size,与向量的动态内存分配策略相关)。

c.size():返回向量中现有元素的个数(<=capacity)。

c.resize(n):调整向量的长度使其能容纳n个元素。

c.resize(n,x):把向量的大小改为n,所有新元素的初值赋为x。

c.empty():如果向量为空,返回真。

2、元素的赋值操作

c.assign(first,last):将迭代器first,last所指定范围内的元素复制到c 中。

c.assign(num,val):用val的num份副本重新设置c。

3、元素的访问操作

c.at(n):等价于下标运算符[],返回向量中位置n的元素,因其有越界检查,故比[ ]索引访问安全。

c.front():返回向量中第一个元素的引用。

c.back():返回向量中最后一个元素的引用。

c.begin():返回向量中第一个元素的迭代器。

c.end():返回向量中最后一个元素的下一个位置的迭代器,仅作结束游标,不可解引用。

c.rbegin():返回一个反向迭代器,该迭代器指向容器的最后一个元素。

c.rend():返回一个反向迭代器,该迭代器指向容器第一个元素前面的位置。

4、元素的删除操作

c.pop_back():删除向量最后一个元素。

c.clear():删除向量中所有元素。

c.erase(iter):删除迭代器iter所指向的元素,返回一个迭代器指向被删除元素后面的元素。

c.erase(start, end):删除迭代器start、end所指定范围内的元素,返回一个迭代器指向被删除元素段后面的元素。

5、元素的插入操作

c.push_back(x):把x插入到向量的尾部。

c.insert(iter, x):在迭代器iter指向的元素之前插入值为x的新元素,返回指向新插入元素的迭代器。

c.insert(iter,n,x):在迭代器iter指向的元素之前插入n个值为x的新元素,返回void。

c.insert(iter,start,end):把迭代器start和end所指定的范围内的所有元素插入到迭代器iter所指向的元素之前,返回void。

6、元素的交换操作

c.reverse():反转元素顺序。

c.swap(c2):交换2个向量的内容,c和c2 的类型必须相同。

C++ STL vector的学习的更多相关文章

  1. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  2. c++ STL vector初步学习

    /*vector(向量):是一种顺序容器,,动态数组,事实上和数组差不多,但它比数组更优越.一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界.而vector正好弥补了这个缺陷, ...

  3. 浅谈C++ STL vector 容器

    浅谈C++ STL vector 容器 本篇随笔简单介绍一下\(C++STL\)中\(vector\)容器的使用方法和常见的使用技巧.\(vector\)容器是\(C++STL\)的一种比较基本的容器 ...

  4. hdu5438 Ponds[DFS,STL vector二维数组]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu5438 题干 代码和解释 解答本题时参考了一篇代码较短的博客,比较有意思,使用了STL vector二维数组. 可以结合下面的示例代码理解: ...

  5. STL vector

    STL vector vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问 ...

  6. STL vector用法介绍

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

  7. STL vector+sort排序和multiset/multimap排序比较

    由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在 ...

  8. STL vector 用法介绍

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

  9. STL vector使用方法介绍

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

随机推荐

  1. Unity经典游戏教程之:合金弹头

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  2. 1、Java小白之路前言

    大二一年准备好好学习Java,养成一个良好的习惯写博客,但是由于各种各样的原因,并没有坚持下来.而正好又赶上大三结束,去实习,发现自己的基础还是有些薄弱,所以决定,重新走上这条Java小白之路. 时隔 ...

  3. css实现左边高度自适应右边高度

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. css常用代码块

    顶部固定导航栏 | css position: fixed; top: 0; left: 0; z-index: 9999; width: 100%; height: 48px; border-top ...

  5. Spark 系列(十)—— Spark SQL 外部数据源

    一.简介 1.1 多数据源支持 Spark 支持以下六个核心数据源,同时 Spark 社区还提供了多达上百种数据源的读取方式,能够满足绝大部分使用场景. CSV JSON Parquet ORC JD ...

  6. Mysql优化-mysql分区

    背景:由于我负责i西科教务处系统,i西科用户量达到20000人左右,那么假设每人每星期10门讲课,数据库记录信息将是20万条,如果不将课程表进行分区或分表,就会造成爆表的情况,如此看来,分区是必须要做 ...

  7. G-P-M 模型

    G-P-M 模型概述 每一个OS线程都有一个固定大小的内存块(一般会是2MB)来做栈,这个栈会用来存储当前正在被调用或挂起(指在调用其它函数时)的函数的内部变量.这个固定大小的栈同时很大又很小.因为2 ...

  8. SpringCloud微服务小白入门之Eureka注册中心和服务中心搭建示例

    一.注册中心配置文件 代码复制区域: spring: application: name: spring-cloud-server server: port: 7000 eureka: instanc ...

  9. Amazon S3 分布式存储的 python 接口实现

    Amazon s3 是一种分布式的对象存储.用键值对的方式,来存储数据.其中,存入的所有数据都是一个对象(object),每一个对象都有一个键(key)存在. 具有非常方便的 web 访问接口,以及权 ...

  10. Linux下Kafka下载与安装教程

    原文链接:http://www.studyshare.cn/software/details/1176/0 一.预备环境 Kafka是java生态圈中的一员,运行在java虚拟机上,按Kafka官方说 ...