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. 用python实现九九乘法表输出-两种方法

    2019-08-05 思考过程:九九乘法表需要两层循环,暂且称之为内循环和外循环,因此需要写双层循环来实现. 循环有for和while两种方式. for循环的实现 for i in range(1,1 ...

  2. 自定义itemCheckView

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...

  3. React之动画实现

    React之动画实现 一,介绍与需求 1.1,介绍 1,Ant Motion Ant Motion能够快速在 React 框架中使用动画.在 React 框架下,只需要一段简单的代码就可以实现动画效果 ...

  4. SpringBoot 使用JPA时解决no session的方法

    1.在application.yml中添加 spring.jpa.open-in-view: true 2.在使用查询的方法添加 @Transactional

  5. java并发编程(十四)----(JUC原子类)对象的属性修改类型介绍

    今天我们介绍原子类的最后一个类型--对象的属性修改类型: AtomicIntegerFieldUpdater,AtomicLongFieldUpdater,AtomicReferenceFieldUp ...

  6. WebService1

    一.什么是WebService(来源百度百科) Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述. ...

  7. Java——类型信息

    1.Class对象 Class对象是一个特殊的对象,它包含了与类有关的信息.Class对象就是用来创建类的所有常规对象的. 类是程序的一部分,每个类都有一个Class对象,每当编写并且编译一个新类,就 ...

  8. 【0806 | Day 9】异常处理/基本的文件操作

    一.异常处理 异常即报错,可分为语法异常和逻辑异常 1. 语法异常 举个栗子 if #报错 syntaxerror 0 = 1 #报错 syntaxerror ... 正经地举个栗子 print(1) ...

  9. 工作中常见的五种技术leader

    力不从心型 在工作中有种技术leader,总认为自己是最好的.在方案设计的时候,自己有一种方案,下属有一种方案.leader非要别人听他的.如果两种方案没有优劣之分,比较建议的做法是让真正实施的人按照 ...

  10. 洛谷 P2787 语文1(chin1)- 理理思维

    题意简述 维护字符串,支持以下操作: 0 l r k:求l~r中k的出现次数 1 l r k:将l~r中元素赋值为k 2 l r:询问l~r中最大连续1的长度 题解思路 珂朵莉树暴力赋值,查询 代码 ...