vector向量容器

vector容器是数组的一个泛化推广,不仅可以像数组那样进行元素的随机访问,还可以在容器的尾端插入新元素,实现了Random Access Container和Back Insertion Sequence概念。vector具有自动的内存管理功能,对于元素的插入和删除,能够动态调整占用的内存空间。

创建vector对象

有多种方式

(1) vector(constA&a=A())

创建一个空的vector对象,A是内存分配器,此参数可以省略,相当于一个vector()的调用,如:

vector<int> v;

(2) vector(size_type n)

创建一个具有n个元素的vector对象,每个vector元素具有对应类型下的默认值,且n个vector元素的内存空间已被分配,如:

vector<double> v(10);//每个元素的默认值为0.0

(3) vector(size_type n,const T&value)

创建一个具有n个元素的vector对象,每个元素具有初始值valuevector v(10,9.9); vector(const vector&)

通过拷贝一个vector对象的各个元素值,创建一个新的vector对象。如:

vector<char> v1(10,’c’);
vector<char> v2(v1)

(5) vector(const InputIterator first, const InputIterator last,const A&a=A())

InputIterator为输入迭代器,通过拷贝迭代区间[first,last),如:

int iArray[]={1,3,5,7,9};
vector<int> v(iArray,iArray+5);

vector初始化

利用vector提供的push_back函数进行vector容器的初始化。如:

vector<int> v;
v.push_back(10);

元素的遍历访问

vector的元素可以通过数组或者迭代器的方式进行遍历访问。

利用数组方式访问vector元素:

#include <vector>
#include <iostream>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    for(int i=0;i<v.size();i++)
    {
        cout<<"v["<<i<<"]="<<v[i]<<endl;
    }
    return 0;
}

vector提供了begin()和end()函数,用于获取首元素的迭代器和最后一个元素的下一位置的迭代器,通过迭代器访问vector元素:

#include<vector>
#include<iostream>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    vector<int>::iterator begin,end;
    end=v.end();
    int j;
    for(begin=v.begin(),j=0;begin!=end;begin++,j++)
    {
        cout<<"v["<<j<<"]="<<*begin<<endl;
    }

    return 0;
}

元素的插入

push_back()在vector容器的尾部添加元素,insert函数可以在任意位置插入元素。

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.insert(v.begin()+3,5);//在4的前面插入3
    v.insert(v.begin(),6);//插入6为首元素
    v.insert(v.end(),7); //插入7为末尾元素
    for(int i=0;i<v.size();i++)
    {
        cout<<"v["<<i<<"]="<<v[i]<<endl;
    }
    return 0;
}

元素的删除

erase函数用来删除迭代器pos所指的元素或者迭代器区间[first,last)的所有元素,原型如下:

iterator erase(iterator pos);
iterator erase(iterator first,iterator last);

例子:

#include<iostream>
#include<vector>
using namespace std;
class MyAnimal
{
public:
    char *name;
    int age;
    MyAnimal(char *name,int age)
    {
        this->name=name;
        this->age=age;
    }
    ~MyAnimal(){}

};
int main()
{
    MyAnimal *pDog=new MyAnimal("dog",1);
    MyAnimal *pMonkey=new MyAnimal("monkey",2);
    MyAnimal *pCat=new MyAnimal("cat",3);
    MyAnimal *pSnake=new MyAnimal("snake",4);

    vector<MyAnimal *> v;//v存放各个对象的地址
    v.push_back(pDog);
    v.push_back(pMonkey);
    v.push_back(pCat);
    v.push_back(pSnake);

    delete pMonkey;//物理删除pMonkey所指的对象
    v.erase(v.beigin()+1);//删除第2个元素
    vector<MyAnimal *>::iterator begin,end;
    end=v.end();
    for(begin=v.begin();begin!=end;begin++)
    {
        cout<<(*begin)->name<<" "<<(*begin)->age<<endl;
    }
    v.clear();
    cout<<"执行clear,vector元素全部被清除"

    return 0;
}

元素的反向遍历

利用vector的反向迭代器reverse_itrator以及相应的rbegin和rend函数可以反向遍历vector容器的元素。

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);

    vector<int>::reverse_iterator rbegin,rend;
    rend=v.rend();
    for(rbegin=v.rbegin();rbegin!=rend;rbegin++)
    {
        cout<<*rbegin<<endl;
    }
    return 0;
}

vector的交换

利用swap算法,实现两个vector容器元素的交换,其原型如下:

void swap(vector &)

例:

#include<iostream>
#include<vector>
using namespace std;
void print(vector<int>& v)
{
    for(int i=0;i<v.size();i++)
        cout<<v[i]<<" ";
        cout<<endl;
}
int main()
{
    //v1
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(2);
    cout<<"-------v1与v2交换前"<<endl;
    cout<<"v1=";
    print(v1);
    //v2
    vector<int> v2;
    v2.push_back(3);
    v2.push_back(4);
    v2.push_back(5);
    v2.push_back(6);
    cout<<"v2=";
    print(v2);
    //v1与v2交换
    swap(v1,v2);
    cout<<"-------v1与v2交换后"<<endl;
    cout<<"v1=";
    print(v1);
    cout<<"v2=";
    print(v2);
    return 0;
}

其他函数

bool empty()

判断是否为空

size_type size()

实际元素个数

size_type max_size()

系统所允许的vector容器的最大元素个数

size_type capacity()

当前可以容纳的vector元素的个数,reserve函数可以调整数据空间大小

reference front()

容器首元素的引用

reference back()

容器的末尾元素的引用

void pop_back()

与push_back相反,pop_back用于删除末尾的一个元素

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-28 20:17:55

vector向量容器的相关文章

第6章 vector向量容器

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

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

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

C++STL之vector向量容器

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

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

oj教程--向量容器

vector向量容器不但像数组一样对元素进行随机访问,还能在尾部插入元素,是一个简单.高效的容器, 完全可以替代数组.vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占用的内存空间. 使用vector向量容器,需要头文件包含声明"#include 一.创建vector对象 vector<type> vec1; // v1保存类型为type的对象,默认构造函数,v1为空 vector<type> vec2(size); // v2含有值初始化的元素的s

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

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

C++中 vector(容器)的用法

vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std; 2.变量声明: 2.1 例:声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,

Cocos2d-x中Vector&lt;T&gt;容器以及实例介绍

Vector<T> 是Cocos2d-x 3.x推出的列表容器,因此它所能容纳的是Ref及子类所创建的对象指针,其中的T是模板,表示能够放入到容器中的类型,在Cocos2d-x 3.x中T表示Ref类.Vector<T>是模仿C++的std::vector<T>模板类而设计的.在内存管理方面不使用__Array的引用计数,它的内存管理是由编译器自动处理的,可以不用考虑内存释放问题.Vector<T>的性能优于__Array类,Coco2d-x官方将Vecto

Unity 中的 Vector向量的 相关使用1

Unity 中的 Vector向量的 相关使用1 孙广东 2015.10.28 以下页面提供有关在您的代码中有效地使用向量的一些建议. 理解向量算法 向量算术是 3D 图形. 物理和动画的基础,深度的理解它是有用的.下面是主要的操作和一些建议,它们可以用于许多的事的说明. 当两个向量相加时,结果是相当于以原始向量为"步骤",一个接一个.请注意这两个参数的顺序并不重要,因为结果是相同的无论哪种方式. 如果第一个向量作为空间中的点然后第二个可以被解释为一个偏移量,或者从这一个位置"