初步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

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-22 05:08:27

初步STL集装箱Vector的相关文章

初步STL集装箱List

List 特点: 1.它实质上是一个双向链表 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3hpYW9idXB0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 2.使用时包括<list>头文件 #include<list> 3.不支持随机訪问迭代器,仅仅能使用双向迭代器  //因此不能使用一些算法和运算符操作

【C++】STL,vector容器操作

C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头文件:#include <vector>.vector 是一个类模板.不是一种数据类型,vector<int>是一种数据类型.Vector的存储空间是连续的,list不是连续存储的. 一. 定义和初始化vector< typeName > v1;       //默认v1为

STL之vector

今天学习了STL 以前用的c,可是比赛回来发现c有点弱,c++的stl是比较实用的,适合比赛.所以学习了一下. vector. 这是一个容器,其实就是线性表. 使用之前在头部加上#include <vector> 然后就可以使用 vector<type> vec; //type is a kind of basic type (eg. int double ..) 然后访问这个表的时候需要声明一个变量 vector<type>::iterator ite; 然后就可以用

C++ STL:vector

  不定长数组:vetor 它就像一个二维数组,只是第一维的大小是固定的,但是第二维的大小不固定. 下面是一些尝试代码: 1. <pre name="code" class="cpp"> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<vec

带你深入理解STL之Vector容器

C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. STL实现了一个Vector容器,该容器就是来改善数组的缺点.vector是一个动态空间,随着元素的加入,它的内部机制会自行扩充以容纳新元素.因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,再也不必因为害怕空间不足而一开始就配置一个大容量数组了,vector是用多少就分配多少. 要

【STL】- vector的使用

初始化: 1. 默认构造: vector<int> vint; 2. 用包含10个元素的数组初始化: vector<int> vint(ia, ia+10); 算法: 1. vint.push_back(i); 2. vint.size(); 3. vint[i]; 代码: 1 #include <vector> 2 #include <iostream> 3 using namespace std; 4 5 int ia[] = {123,1,32,53,

【STL】vector的insert方法详解

#include<vector> #include<iostream> using namespace std; int main() { vector<int> v(3); v[0]=2; v[1]=7; v[2]=9; v.insert(v.begin(),8);//在最前面插入新元素. v.insert(v.begin()+2,1);//在迭代器中第二个元素前插入新元素 v.insert(v.end(),3);//在向量末尾追加新元素. vector<int

C++的STL中vector内存分配方法的简单探索

STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio.h> using namespace std; int main() { vector<int> x_vec; printf("data size : [%3d], mem size : [%3d]\n", x_vec.size(), x_vec.capacity())

STL容器 vector,list,deque 性能比较

C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差别并不是很大,但是当数据达到一定数量后,会明显感觉性能上有很大差异. 本文就试图从介绍,以及性能比较两个方面来讨论这个问题. vector - 会自动增长的数组 list - 擅长插入删除的链表 deque - 拥有vector和list两者优点的双端队列 性能竞技场 性能总结与使用建议 测试程序清