STL --> vector向量

一、向量的介绍

  向量vector是一种对象实体,能够容纳许多其他类型相同的元素,因为又被称为容器。

在使用它时,需要包含头文件vector,

#include <vector>

vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:

using std::vector;
vector<int> vec;

或者连在一起,使用全名:

std::vector<int> vec;

建议使用全局的命名域方式:

using namespace std;

二、向量的基本操作

  基本操作如下:


函数


表述


c.assign(beg,end)

c.assign(n,elem)


将[beg; end)区间中的数据赋值给c。

将n个elem的拷贝赋值给c。


c.at(idx)


传回索引idx所指的数据,如果idx越界,抛出out_of_range。


c.back()


传回最后一个数据,不检查这个数据是否存在。


c.begin()


传回迭代器重的可一个数据。


c.capacity()


返回容器中数据个数。


c.clear()


移除容器中所有数据。


c.empty()


判断容器是否为空。


c.end()


指向迭代器中的最后一个数据地址。


c.erase(pos)

c.erase(beg,end)


删除pos位置的数据,传回下一个数据的位置。

删除[beg,end)区间的数据,传回下一个数据的位置。


c.front()


传回第一个数据。


get_allocator


使用构造函数返回一个拷贝。


c.insert(pos,elem)

c.insert(pos,n,elem)

c.insert(pos,beg,end)


在pos位置插入一个elem拷贝,传回新数据位置。

在pos位置插入n个elem数据。无返回值。

在pos位置插入在[beg,end)区间的数据。无返回值。


c.max_size()


返回容器中最大数据的数量。


c.pop_back()


删除最后一个数据。


c.push_back(elem)


在尾部加入一个数据。


c.rbegin()


传回一个逆向队列的第一个数据。


c.rend()


传回一个逆向队列的最后一个数据的下一个位置。


c.resize(num)


重新指定队列的长度。


c.reserve()


保留适当的容量。


c.size()


返回容器中实际数据的个数。


c1.swap(c2)

swap(c1,c2)


将c1和c2元素互换。

同上操作。


vector<Elem> c

vector <Elem> c1(c2)

vector <Elem> c(n)

vector <Elem> c(n, elem)

vector <Elem> c(beg,end)

c.~ vector <Elem>()


创建一个空的vector。

复制一个vector。

创建一个vector,含有n个数据,数据均已缺省构造产生。

创建一个含有n个elem拷贝的vector。

创建一个以[beg;end)区间的vector。

销毁所有数据,释放内存。

三、向量的声明及初始化
  vector 型变量的声明以及初始化的形式也有许多, 常用的有以下几种形式:

vector<int> a ;                                //声明一个int型向量a
vector<int> a(10) ;                            //声明一个初始大小为10的向量
vector<int> a(10, 1) ;                         //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ;                             //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ;        //将a向量中从第0个到第2个(共3个)作为向量b的初始值

除此之外, 还可以直接使用数组来初始化向量:

int n[] = {1, 2, 3, 4, 5} ;
vector<int> a(n, n+5) ;              //将数组n的前5个元素作为向量a的初值
vector<int> a(&n[1], &n[4]) ;        //将n[1] - n[4]范围内的元素作为向量a的初值

四、元素的输入及访问
  元素的输入和访问可以像操作普通的数组那样, 用cin>>进行输入, cout<<a[n]这样进行输出:
示例:

    #include<iostream>
    #include<vector>

    using namespace std ;

    int main()
    {
        vector<int> a(10, 0) ;      //大小为10初值为0的向量a

        //对其中部分元素进行输入
        cin >>a[2] ;
        cin >>a[5] ;
        cin >>a[6] ;

        //全部输出
        int i ;
        for(i=0; i<a.size(); i++)
            cout<<a[i]<<" " ;

        return 0 ;
    }

在元素的输出上, 还可以使用遍历器(又称迭代器)进行输出控制。在 vector<int> b(a.begin(), a.begin()+3) ; 这种声明形式中, (a.begin()、a.begin()+3) 表示向量起始元素位置到起始元素+3之间的元素位置。(a.begin(), a.end())则表示起始元素和最后一个元素之外的元素位置。向量元素的位置便成为遍历器, 同时, 向量元素的位置也是一种数据类型, 在向量中遍历器的类型为: vector<int>::iterator。 遍历器不但表示元素位置, 还可以再容器中前后移动。
    在上例中讲元素全部输出部分的代码就可以改写为:

   //全部输出
    vector<int>::iterator t ;
    for(t=a.begin(); t!=a.end(); t++)
        cout<<*t<<" " ;

*t 为指针的间接访问形式, 意思是访问t所指向的元素值。

五、二维向量
    与数组相同, 向量也可以增加维数, 例如声明一个m*n大小的二维向量方式可以像如下形式:

 vector< vector<int> > b(10, vector<int>(5));        //创建一个10*5的int型二维向量

在这里, 实际上创建的是一个向量中元素为向量的向量。同样可以根据一维向量的相关特性对二维向量进行操作。

例如:

    #include<iostream>
    #include<vector>

    using namespace std ;

    int main()
    {
        vector< vector<int> > b(10, vector<int>(5, 0)) ;

        //对部分数据进行输入
        cin>>b[1][1] ;
        cin>>b[2][2] ;
        cin>>b[3][3];

        //全部输出
        int m, n ;
        for(m=0; m<b.size(); m++)           //b.size()获取行向量的大小
        {
            for(n=0; n<b[m].size(); n++)    //获取向量中具体每个向量的大小
                cout<<b[m][n]<<" " ;
            cout<<"\n" ;
        }

        return 0;
    }

同样, 按照这样的思路还可以创建更多维的向量, 不过维数太多会让向量变得难以灵活控制, 三维以上的向量还需酌情使用。

时间: 2024-08-09 07:12:51

STL --> vector向量的相关文章

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

C++STL之vector向量容器

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

STL—Vector简介

有关C++ STL 中的vector向量的用法(代码示例) 一. 简介 Vector是一个称为向量的顺序容器(不明白顺序容器与关联容器的可以Google). 二. 特点 1. 动态(相当于一个动态数组):2. 可用于存放各种数据结构(内置的,自定义的,当然也可以是vector)(当是vector时注意申明格式eg:vector<vector<Information>>与vector< vector<Information> >,前者错误,后者正确,两个‘&g

STL ——vector 学习

STL简介 C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等.  C++ STL 提供给程序员以下三类数据结构的实现: 标准容器类   顺序性容器  vector 从后面快速的插入与删除,直接访问任何元素  deque 从前面或后面快速的插入与删除,直接访问任何元素 list 双链表,从任何地方快速插入与删除   关联容器  

STL vector常用API

1.容器:序列容器(时间决定).关联式容器(容器中的数据有一定规则) 2.迭代器:通过迭代器寻找.遍历容器中的数据 vetor的使用:数据遍历与输出 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> //向量 动态数组 #include<algorithm> //算法头文件 #include<string> using namespace std; void myPrint

STL vector list deque区别与实现(总结)

1 vector 向量 相当于一个数组     在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即 capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉.通常此默认的内存分配能完成大部分情况下的存储. 优点: (1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组          

第6章 vector向量容器

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

stl vector 类

目录 [-]说明构造方法例子vector 类中定义了4中种构造函数: · 默认构造函数,构造一个初始长度为0的空向量,如:vector<int> v1; · 带有单个整形参数的构造函数,此参数描述了向量的初始大小. 说明 vector是一种动态数组,是基本数组的类模板.其内部定义了很多基本操作. #include <vector> 注意:头文件没有“.h”构造: 这个构造函数还有一个可选的参数,这是一个类型为T的实例,描述了各个向量种各成员的初始值: 如:vector<int

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

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