初探STL容器之Vector

vector

特点:

1.可变长的动态数组

2.使用时包含头文件 #include <vector>

3.支持随机访问迭代器

? 根据下标随机访问某个元素时间为常数

? 在尾部添加速度很快

? 在中间插入慢

成员函数

初始化

vector();              初始化成空
vector(int n);               初始化成有n个元素
vector(int n, const T & val);     初始化成有n个元素, 每个元素的值都是val,类型是T
vector(iterator first, iterator last);  初始化为与别的容器上区间[first, last)一致的内容

举例:

1.创建一个int类型的空的vector对象:

  vector<int> intvec;

2.创建一个包含5个int类型数据的vector:

    vector<int> intvec(5);

3.创建一个包含5个int类型数据的vector,并且都初始化为2:

vector<int> intvec(5, int(2));

4.通过复制某vec容器来创建

vector<int> intvec(vec.begin+M,vec.begin+N)

元素的访问


intvec.at(index)


返回由index指定的位置上的元素


intvec[index]


返回由index指定的位置上的元素

举例:

include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec(10);
    for (int i = 0;i != vec.size();i++)
    {
        vec.at(i) = i;
        //vec[i] = i ;
    }

    for (int i = 0;i != vec.size();i++)
    {
        cout << vec.at(i)<<endl;
        //cout <<vec[i]<<endl;
    }

    return 0;
}

容器的大小


表达式


作用


intvec.capacity()


返回不重新分配空间可以插入到容器intvec中的元素的最大个数


intvec.empty()


容器intvec为空,返回true;否则,返回false


Intvec.size()


返回容器intvec中当前的个数


intvec.resize(num)


将元素个数改为num。如果size()增加,默认的构造函数负责创建这些新元素


intvec.resize(num, elem)


将元素个数改为num。如果size()增加,默认的构造函数将这些新元素初始化为elem

举例:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec1;
    cout << vec1.empty()<<endl; //返回1
    cout << vec1.size()<<endl;  //返回0

    vector<int> vec2(20);
    cout << vec2.empty()<<endl; //返回0
    cout << vec2.size()<<endl;  //返回20

    vector<int> vec3(15,1);
    cout << vec3.capacity()<<endl;//返回15
    vec3.push_back(1);
    cout << vec3.size()<<endl;  //返回16
    cout << vec3.capacity()<<endl;//返回30
                                  //数组不够时,下次重新分配时会扩大为两倍

    return 0;
}

容器的操作


语句


作用


intvec.clear()


从容器中删除所有元素


intvec.erase(position)


删除由position指定的位置上的元素


intvec.erase(beg,end)


删除从beg到end-1之间的所有元素


intvec.insert(position, elem)


将elem的一个拷贝插入到由position指定的位置上,并返回新元素的位置


intvec.inser(position, n, elem)


将elem的n个拷贝插入到由 position指定的位置上


intvec.insert(position, beg, end)


将从beg到end-1之间的所有元素的拷贝插入到intvec中由position指定的位置上


intvec.push_back(elem)


将elem的一个拷贝插入到vector的末尾


intvec.pop_back()


删除最后元素


intvec.front()


返回第一个元素的引用,不检查容器是否为空


Intvec.back()


返回最后一个元素的引用,不检查容器是否为空

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec(10,1);
    cout<<vec.empty()<<endl;  //返回0
    vec.clear();
    cout<<vec.empty()<<endl;  //返回1

    vector<int> vec1(1,1);
    vec1.insert(vec1.begin()+1,2); //在该位置插入,把原来该位置以其以后的元素整体后移
    for(int i = 0;i != vec1.size();i++)
        cout<<vec1.at(i);  //12
    cout<<endl;

    vec1.push_back(3);
    for(int i = 0;i != vec1.size();i++)
        cout<<vec1.at(i);  //123
    cout<<endl;

    vec1.pop_back();
    vec1.pop_back();
    for(int i = 0;i != vec1.size();i++)
        cout<<vec1.at(i);  //1
    cout<<endl;

    return 0;
}
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec(10,1);
    vec.push_back(2);//12

    cout<<vec.front()<<endl;  //返回1
    cout<<vec.back()<<endl;  //返回2

    int &head = vec.front();
    head++;
    int &tail = vec.back();
    tail--;
    cout<<vec.front()<<endl;  //返回2
    cout<<vec.back()<<endl;  //返回1

    return 0;
}

二维数组

vector< vector<int> > v(3);

//v有3个元素,

//每个元素都是vector<int> 容器

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

输出:

0  1  2  3

0  1  2  3

0  1  2  3

初探STL容器之Vector

时间: 2024-10-24 16:24:49

初探STL容器之Vector的相关文章

初探STL容器之List

List 特点: 1.实质上是双向链表 2.使用时包含<list>头文件 #include<list> 3.不支持随机访问迭代器,只能使用双向迭代器  //因此不能使用一些算法和运算符操作 4.在任何位置的插入.删除操作都是常数时间 成员函数 初始化 list <int> intlist0; // 创建空的 intlist list <int> intlist1( 3 ); //包含3个元素 list <int> intlist2( 5, 2 )

STL 源码剖析读书笔记三:序列式容器之 vector、list

1. STL 中的容器 容器,置物之所也.STL 容器即是将运用最广的一些数据结构实现出来.如下图所示: 上图以内缩方式来表达基层和衍生层的关系.所谓衍生,并非派生关系,而是内含关系.例如 heap 内含一个 vector,priority-queue 内含一个 heap.stack.queue都内含一个 deque,set/map/multimap/multiset 都内含一个 RB-tree,hash_x 都内含一个 hashtable. 2. 序列式容器之 vector 所谓序列式容器,其

STL学习笔记--4、序列式容器之vector

常见的数据结构:array数组,list链表,tree树,stack栈,queue队列,hash table散列表,set集合,map映射-- 根据数据在容器中的排列分为:序列式sequence和关联式associative. 序列式容器之vector 1.vector VS array: array是静态空间,一旦配置则无法改变: vector是动态空间,随着元素的加入,内部机制会自动扩充新的空间来容纳新的元素. 实现技术:对大小的控制和重新配置时的数据移动效率. 扩充空间:配置新空间.数据移

C++ 序列式容器之vector

什么是容器 容器,顾名思义,是用来容放东西的场所.C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的.众所周知,常用的数据结构不外乎:数组array,  链表list,  树tree,  栈stack,  队列queue,  散列表hash table,  集合set.映射表map 等等.容器便是容纳这些数据结构的.这些数据结构分为序列式与关联式两种,故容器也分为序列式容器和关联式容器.   (图来自<STL源码剖析>) vector 概述 1.  vector是STL提供的一

c++容器之vector

定义:vector 是一个动态存储任何对象的序列容器. 头文件:#include<vector> 初始化: 1. vector<T> v;   创建一个空的vector容器v,其元素类型为T 2. vector<T> v1(v2);    创建存放元素类型为T的vector容器v1,并存放v2所有的元素 3. vector<T> v1(v2.begin(), v2.end());   创建容器v2,其元素值范围为[v2.begin(), v2.end());

STL容器之map与hash_map

一.简介 就应用来说,map已经是STL标准库的成员,而hash_map暂时还未进入标准库,是扩展ext中的一个功能,但也是非常常用并且非常重要的库. 二.简单对比 首先,要说的是这两种数据结构的都提供了KEY-VALUE的存储和查找的功能.但是实现是不一样的,map是用的红黑树,查询时间复杂度为log(n).而hash_map是用的哈希表,查询时间复杂度理论上可以是常数,但是消耗内存大,是一种以存储换时间的方法. 树查找,在总查找效率上比不上hash表,但是它很稳定,它的算法复杂度不会出现波动

ACM__容器之vector

今天做题碰到了深搜的题,有一种存图方式需要用到vector,对vector不是很熟悉,回顾了一下 vector都知道是一个容器,但并不准确,它是一个多功能的能够操作多种数据结构和算法的模板类和函数库.之所以被叫做容器,是因为它能像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.(此句话来自百度百科) 1 #include<vector> 2 #include<cstdio> 3 #include<algorithm>

c++STL容器之list容器

链表:将数据进行链式存储.物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接进行实现的. STL中的链表是一个双向循环链表. 一.构造函数 list<T> lst; list(bag,end); list(n,elem); list(const list &list); 二.list的赋值和交换 assign(beg,end); assign(n,ele); list& operator=(const list &list); swap(list)

c++STL容器之deque容器

deque是双端数组. deque和vector的区别: vector对于头部的插入和删除效率低,数据量越大,效率越低: deque相对于而言,对头部的插入和删除比vector快: vector访问元素时速度比deque快,这和两者的内部实现有关: deque内部工作原理: deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放着真实数据.中控器维护的是每个缓冲区的地址,使得使用每个deque时像一块连续的内存空间. deque容器的迭代器是支持随机访问的. 一.deque构造函数 de