初步STL集装箱Vector

初步STL集装箱Vector

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

 

 

 

 

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117513.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月4日 下午4:00
下一篇 2022年1月4日 下午6:00


相关推荐

  • python自动化运维面试题_运维面试题(含答案)「建议收藏」

    python自动化运维面试题_运维面试题(含答案)「建议收藏」运维工程师面试题姓名:答题时间:1.新安装MYSQL后怎样提升MYSQL的安全级别?A.修改mysql默认端口B.linux下可以通过iptables来限制访问mysql端口的IP地址C.对所有用户设置较复杂密码并严格指定对应账号的访问IP(可在mysql库中user表中指定用户的访问可访问IP地址)D.root特权账号的处理(建议给root账号设置强密码,并指定只允许本地登录)E.开启二进制查询…

    2022年5月10日
    46
  • 常用的DC转DC 降压电路 MP1584EN 5V 3.3V 1.8V[通俗易懂]

    常用的DC转DC 降压电路 MP1584EN 5V 3.3V 1.8V[通俗易懂]资料参考:https://wenku.baidu.com/view/b836b110ce84b9d528ea81c758f5f61fb73628d8.html输入电压:4.5-28V输出电压:0.8-20V下图是8V-28V转5V的电路(亲测使用中)下图是4.5V-28V转1.8V参考电路下图是4.5V-28V转3.3V参考电路下图是对应不同输出电压值所调…

    2022年6月20日
    30
  • php 最长回文子串

    php 最长回文子串最长回文子串由于case包含奇偶性,所以分两种情况讨论思路:找到以字符”x”为中心的最长回文子串从x的下标开始遍历,拆分为偶数对称情况和奇数对称情况 终止条件有2: 对称位置的字符不相同 循环右侧下标超出字符长度 结果:1364ms14.9MB主要难点是:计算下标代码:classSolution{/***@paramStr…

    2022年6月4日
    41
  • 华为手机照片 计算机,教你华为手机怎么传照片到电脑上去

    华为手机照片 计算机,教你华为手机怎么传照片到电脑上去现在大家使用手机的频率越来越频繁 手机也为我们提供了许多的便利 今天小编也来说一下这个教你华为手机怎么传照片到电脑上去相关的文章 这个操作其实不复杂 接下来就给大家介绍一下教你华为手机怎么传照片到电脑上去 一起来看看吧 华为手机怎么传照片到电脑上去 一 使用数据线连接电脑 通过 USB 数据线将手机连接至电脑 点击查看照片或管理文件按钮 电脑将自动安装驱动程序 安装完成后 双击电脑中新出现的以手机

    2026年3月26日
    2
  • 遭遇onbeforeunload

    遭遇onbeforeunload想用 JS 控制网页卸载确实是一件麻烦的事情 如果用了 unload 那么很显然我们无法阻止网页的 replace 或者 reload 因为 unload 是在下一个网页到达 client 的时候被触发的 因此我只能选择用 onbeforeunlo nbsp onbeforeunlo 被调用的时候 当前的页面尚未被 unload 所以我们还能够来得及做一些事情 但是我最近也遇到了一些麻烦 onbeforeu

    2026年3月16日
    3
  • sql根据字段去重_sql如何去重查询

    sql根据字段去重_sql如何去重查询关于sql去重,我简单谈一下自己的简介,如果各位有建议或有不明白的欢迎多多指出。关于sql去重最常见的有两种方式:DISTINCT和ROW_NUMBER(),当然了ROW_NUMBER()除了去重还有很多其他比较重要的功能,一会我给大家简单说说我自己在实际中用到的。假如有张UserInfo表,如下图:现在我们要去掉完全重复的数据:SELECTDISTINCT*FROMdbo.UserInf…

    2026年4月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号