前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/C++——vector的基本操作总结

C/C++——vector的基本操作总结

作者头像
felixzhao
发布2019-01-31 16:29:34
7.2K0
发布2019-01-31 16:29:34
举报
文章被收录于专栏:null的专栏

标准库vector类型是C++中使用较多的一种类模板,vector类型相当于一种动态的容器,在vector中主要有一些基本的操作,接下来分别从以下的几个方面总结:

  • vector对象的定义和初始化
  • vector对象的基本操作,主要包括添加元素,遍历等

1、vector对象的定义和初始化

在vector中主要有四种定义和初始化的方法:

1.1、定义空的vector

定义的方法为:

代码语言:javascript
复制
vector<T> v;

1.2、定义一个vector的副本

定义的方法为:

代码语言:javascript
复制
vector<T> v1(v);

1.3、定义并初始化

定义的方法为:

代码语言:javascript
复制
vector<T> v2(n, i);

定义了长度为n的vector v2,并且每个元素都是i。

1.4、定义并指定初始长度

定义的方法为:

代码语言:javascript
复制
vector<T> v3(n);

采用的初始化方法为默认初始化。

1.5、例子

对于上述的四种定义方法如下图所示:

代码语言:javascript
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    //第一种定义方法
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    //第二种定义方法
    vector<int> v1(v);
    //第三种定义方法
    vector<int> v2(10, 1);
    //第四种定义方法
    vector<int> v3(10);

    printf("first: ");
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");
    printf("second: ");
    for (vector<int>::size_type ix1 = 0; ix1 != v1.size(); ix1 ++){
            printf("%d\t", v1[ix1]);
    }
    printf("\n");
    printf("third: ");
    for (vector<int>::size_type ix2 = 0; ix2 != v2.size(); ix2 ++){
            printf("%d\t", v2[ix2]);
    }
    printf("\n");
    printf("forth: ");
    for (vector<int>::size_type ix3 = 0; ix3 != v3.size(); ix3 ++){
            printf("%d\t", v3[ix3]);
    }
    printf("\n");

    return 0;
}

注:上述代码是在C中使用vector。

2、vector中的基本操作

在vector中的基本操作包括插入,删除,遍历等。

2.1、插入操作

在vector中插入元素包括两种,一种是在尾部添加元素,使用的函数是push_back()函数,另一种是在指定位置插入元素,使用到的函数是insert()函数。

其中,insert()函数的具体形式为:

代码语言:javascript
复制
insert(p, t)

指的是在迭代器p之前插入值为t的元素。具体应用如下面的例子:

代码语言:javascript
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在开始插入10
    v.insert(v.begin(), 10);
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在10和0之间添加11
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++){
            if (*it == 0){
                    v.insert(it, 11);
                    break;
            }
    }
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    return 0;
}

2.2、删除操作

使用erase()方法删除指定的元素。

代码语言:javascript
复制
erase(p)

删除迭代器p所指向的元素。

代码语言:javascript
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在开始插入10,10,10
    v.insert(v.begin(), 3, 10);
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //删除第二个10
    int i = 0;
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++){
            i++ ;
            if (i == 2){
                    v.erase(it);
                    break;
            }
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");


    return 0;
}

除此之外,还有clear()方法,清空vector中的所有元素,pop_back()方法,删除末尾的元素。

代码语言:javascript
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //删除末尾元素
    v.pop_back();

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");


    return 0;
}

2.3、遍历

遍历通常有两种方式:

  • 通过下标
  • 利用迭代器

如下:

代码语言:javascript
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }
    //利用下标      
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //利用迭代器
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it ++){
            printf("%d\t", *it);
    }
    printf("\n");


    return 0;
}

2.4、其他

在上面的操作中,还有一些操作,如:

  • size(),返回的是vector的大小
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年06月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、vector对象的定义和初始化
    • 1.1、定义空的vector
      • 1.2、定义一个vector的副本
        • 1.3、定义并初始化
          • 1.4、定义并指定初始长度
            • 1.5、例子
            • 2、vector中的基本操作
              • 2.1、插入操作
                • 2.2、删除操作
                  • 2.3、遍历
                    • 2.4、其他
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档