oj教程--向量容器

vector向量容器不但像数组一样对元素进行随机访问,还能在尾部插入元素,是一个简单、高效的容器, 完全可以替代数组。vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占用的内存空间。

使用vector向量容器,需要头文件包含声明“#include

一、创建vector对象

vector<type> vec1;                       // v1保存类型为type的对象,默认构造函数,v1为空
vector<type> vec2(size);              // v2含有值初始化的元素的size个副本
vector<type> vec3(size,value);    // v3包含值为value的size个元素
vector<type> vec4(myvector);     // v4是myvector的一个副本
vector<type> vec5(first,last);       // 用迭代器first和last之间的元素创建v5

二、常用操作

这里我们以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 的类型必须相同。

三、代码示例

1、增加元素到尾部

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
    vector<int> v;
    v.push_back(3);
    v.push_back(6);
    v.push_back(9);
    return 0;
}

2、下标访问

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
    vector<int> v(3);
    v[0] = 3;
    v[1] = 6;
    v[2] = 9;
    cout << v[0] << " " << v[1] << " " << v[2] << endl;
    return 0;
}

3、迭代器访问

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
    vector<int> v(3);
    v[0] = 3;
    v[1] = 6;
    v[2] = 9;
    //定义迭代器变量
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++) {
        //输出迭代器上的元素值
        cout << *it << " ";
    }
    cout << endl;
    return 0;
}

4、增加元素

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
    vector<int> v(3);
    v[0] = 3;
    v[1] = 6;
    v[2] = 9;

    //在最前面插入新元素,元素值为1
    v.insert(v.begin(), 1);

    //在第2个元素后插入新元素2
    v.insert(v.begin()+2, 2);

    //在向量的末尾追加新元素0
    v.insert(v.end(), 0);
    //定义迭代器变量
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++) {
        //输出迭代器上的元素值
        cout << *it << " ";
    }
    //换行
    cout << endl;
    return 0;
}

5、删除元素

#include <vector>
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
    vector<int> v(10);
    //给向量赋值
    for (int i = 0; i < 10; i++) {
        v[i] = i;
    }
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++) {
        //输出迭代器上的元素值
        cout << *it << " ";
    }
    //换行
    cout << endl;

    //删除第3个元素,即v[2]
    v.erase(v.begin()+2);
    for (it = v.begin(); it != v.end(); it++) {
        //输出迭代器上的元素值
        cout << *it << " ";
    }
    //换行
    cout << endl;

    //删除迭代器第1到第5区间(不包括第5区间)的所以元素
    v.erase(v.begin()+1, v.begin()+5);
    for (it = v.begin(); it != v.end(); it++) {
        //输出迭代器上的元素值
        cout << *it << " ";
    }
    //换行
    cout << endl;
    //清空向量
    v.clear();
    //输出向量大小
    cout << v.size() << endl;

    return 0;
}

原文地址:https://www.cnblogs.com/daxiang2008/p/10113464.html

时间: 2024-10-12 23:18:34

oj教程--向量容器的相关文章

第6章 vector向量容器

/* 第三篇 C++STL容器技术 第6章 vector向量容器 6.1 vector技术原理 6.2 vector应用基础 6.3 本章小结 */ // 第6章 vector向量容器 // 6.1 vector技术原理 ------------------------------------------------------------------------------------------- // 6.2 vector应用基础 -----------------------------

C++ STL中vector(向量容器)使用简单介绍

原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组,或者作为动态内存. 在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即cap

标准模板库使用参考——vector向量容器

C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,STL被组织成为下面的13个头文件:<algorithm>, <deque>, <functional>, <iterator>, <vector>, <list>, <map>, <memory>, <nume

Docker最全教程——数据库容器化(十)

原文:Docker最全教程--数据库容器化(十) 终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容器化实践,中间再穿插一些知识点和实践细节.在编写的过程中,我一直处于一种矛盾的心理,是一笔带过呢?还是尽可能的将实践细节全部讲到位呢?最后,我选择了后者,虽然要花费更多的精力,但是既然开始了本次教程,就尽量写到位吧. 目录 数据库容器化 什么是数据库

C++STL之vector向量容器

vector向量容器 vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vector容器的下标是从0开始计数的, 也就是说, 如果vector容器的大小是n, 那么, 元素的下标是0~n-1 对于vector容器的容量定义, 可以事先定义一个固定的大小, 事后, 可以随时调整其大小; 也可以事先不定义, 随时使用push_back()方法从尾部扩张元素, 也可以使用insert()

DOCKER简明教程 : 通过容器连接REDIS数据库

序言 本文重点讲解了如何通过Redis的官方镜像和Docker容器来搭建redis-cli,并将其连接到Redis镜像.首先要跟大家简单介绍一下Redis,这是一个键值存储系统,除了对场景进行缓存之外,Redis还提供了很多强大的功能,因此也目前是非常受欢迎的一个数据库. Docker镜像仓库简介 大家可以在Docker Hub里搜索到目前所有的主流应用和服务的镜像,像Python语言.MySQL数据库等等镜像在Docker Hub里面都有.而且Docker Hub里面的镜像数量非常多,不管我们

C++ STL vector 向量容器 基本方法

创建vector对象 1.不指定容器大小 vector<int> vec; 2.指定容器大小 vector<int> vec(10); 3.指定容器大小和初始值 vector<int> vec(10,0); 尾部元素扩张 vec.push_back(); 插入元素 1.在最前面插入元素 vec.insert(vec.begin() , 2); 2.在第二个元素前插入元素 vec.insert(vec.begin()+2 , 2); 3.在末尾插入元素 vec.inser

java Vamei快速教程18 容器

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Java中有一些对象被称为容器(container).容器中可以包含多个对象,每个对象称为容器中的一个元素.容器是用对象封装的数据结构(data structure). 充满梦想的容器 不同的数据结构有不同的组织元素的方式,也可以有不同的操作.根据具体实施的不同,数据结构的操作效率也各有差别.Java中的容器也是这样.我们要选择适当的容器,以应对变化的需求. (关于数据结构更多的

vector向量容器

vector容器是数组的一个泛化推广,不仅可以像数组那样进行元素的随机访问,还可以在容器的尾端插入新元素,实现了Random Access Container和Back Insertion Sequence概念.vector具有自动的内存管理功能,对于元素的插入和删除,能够动态调整占用的内存空间. 创建vector对象 有多种方式 (1) vector(constA&a=A()) 创建一个空的vector对象,A是内存分配器,此参数可以省略,相当于一个vector()的调用,如: vector&l